2013年1月3日星期四

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  }

没有评论:

发表评论