List All Of The Subsets

Problem description:Please list all of the subsets of a known set including the empty set.

My idea: one thinking of the algorithm backtracking is to generate a tree of subset and the condition of an element in the super set for a subset is either on or off.Hence we can specialize the subset tree to a binary tree and we print once when we reach the bottom of the tree each time.It is also easy to write a program.
 
 1 #include <stdio.h>

 2  #define MAX 1000

 3  

 4  int n=3;  //the number of the set elements

 5  int set[MAX]={1,2,3};

 6  int count=0;//the number of the subset.

 7  

 8  void DFS(int level);

 9  void print_set();

10  

11  int main()

12  {

13      DFS(0);

14      return 0;

15  }

16  

17  void DFS(int level)

18  {

19      if(level==n)

20      {

21          print_set();

22          return ;

23      }

24      int save=set[level];

25      set[level]=0;

26      int index=0;

27      for(index=0;index<2;index++)

28      {

29          DFS(level+1);

30          set[level]=save;

31      }

32  

33  }

34  

35  void print_set()

36  {

37      int index;

38      count++;

39      printf("%d: {",count);

40      for(index=0;index<n;index++)

41      {

42          if(set[index]!=0) 

43              printf("%d ",set[index]);

44      }

45      printf("}\n");

46  }

 

你可能感兴趣的:(list)