/* Algorithm 4.2 in Ruskey's textbook: Recursive procedure to generate subsets in lexicographic order. */ #include #include #define MAX 20 void PrintIt(int Array[], int n) { int i; for (i = 0; i < n; i ++) printf(" %d", Array[i]); printf("\n"); } void Subsets(int Array[], int n, int pos) { if (pos > n-1) PrintIt(Array, n); else { Array[pos] = 0; Subsets(Array, n, pos+1); Array[pos] = 1; Subsets(Array, n, pos+1); } } int main(int argc, char *argv[]) { int n, i; int B[MAX+1]; if (argc != 2) { printf("\n A single argument expected.\n"); return 1; } n = atoi(argv[1]); if (n < 0) { printf("\n Positive number expected.\n"); return 2; } if (n > MAX) { printf("\n The number cannot exceed %d.\n", MAX); return 3; } /* Initialize */ /* for (i = 0; i < MAX; i ++) B[i] = 0; */ Subsets(B, n, 0); return 0; }