/* ------------------------------------------------------ *//* PROGRAM All Possible Subset by Lexical Order : *//* This program generates all subsets by lexical order.*//* *//* Copyright Ching-Kuang Shene July/05/1989 *//* ------------------------------------------------------ */ #include <stdio.h>#include <stdlib.h> #define MAXSIZE 20#define LOOP 1 void main(void){ int set[MAXSIZE]; int n, i; int position; char line[100]; printf("\nAll Possible Subsets Generation by Lexical Order"); printf("\n================================================"); printf("\n\nNumber of Elements in the Set --> "); gets(line); n = atoi(line); printf("\n{}"); /* the empty set */ position = 0; /* start from the 1st pos. */ set[position] = 1; /* it gets a '1' */ while (LOOP) { /* loop until done... */ printf("\n{%d", set[0]); /* print one result */ for (i = 1; i <= position; i++) printf(",%d", set[i]); printf("}"); if (set[position] < n) { /* this pos. can be inc*/ set[position+1] = set[position] + 1; /* YES*/ position++; /* inc. next pos. */ } else if (position != 0) /* NO, the 1st pos? */ set[--position]++; /* backup and increase */ else /* NO, the 1st pos and can */ break; /* not be inc. JOB DONE! */ }}

评论