I can iterate through subsets of size 1
for( int a = 0; a < size; a++ ) {
or subsets of size 2
for( int a1 = 0; a1 < size; a1++ ) { for( int a2 = a1+1; a2 < size; a2++ ) {
or 3
for( int a1 = 0; a1 < size; a1++ ) { for( int a2 = a1+1; a2 < size; a2++ ) { for( int a3 = a2+1; a3 < size; a3++ ) {
But how to do this for subsets of size n?
It does work based on Adam Rosenfield's answer
void iterate(int *a, int i, int size, int n) { int start = 0; if( i > 0 ) start = a[i-1]+1; for(a[i] = start; a[i] < n; a[i]++) { if(i == n-1) { // a is the array of indices of size n for( int k = 0; k < size; k++ ) { printf("%d ",a[k]); } printf("\n"); } else iterate(a, i+1, size, n); } }
source share