00111
01011
01101
01110
10011
10101
10110
11001
11010
11100
####
11100 [0 1 2]
11010 [0 1 3]
11001 [0 1 4]
10110 [0 2 3]
10101 [0 2 4]
10011 [0 3 4]
01110 [1 2 3]
01101 [1 2 4]
01011 [1 3 4]
00111 [2 3 4]
####
typedef struct {
int N, M;
char *posns.
} POSNS;
POSNS *initGenerator( int N, int M ) {
POSNS *p = malloc( sizeof( POSNS ) );
p->N = N; p->M = M; p->posns = malloc( M );
for( i = 0; i < M; ++i ) p->posns[ i ] = N - M + i;
return posns;
}
char *iterGenerator( POSNS *p ) {
if( done) {
free( p->posns );
free( p );
return NULL;
}
// modify p->posns;
...
return p->posns;
}
POSNS p = initGenerator( n, m );
while( c = iterGenerator( p ) ) {
// use c[].
}