DFS_子集

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <algorithm>
 6 #include <vector>
 7 #define sc(x) scanf("%d",&(x))
 8 #define sc2(x,y) scanf("%d%d", &(x), &(y))
 9 #define pn printf("%\n")
10 #define PF(x) printf("%d ",x)
11 #define pf(x) printf("%d\n",x)
12 #define CL(x, y) memset(x, y, sizeof(x))
13 #define FOR(i,b,e)  for(int i = b; i <= e; i++)
14 #define max(a, b) (a > b ? a : b)
15 #define ABS(a, b) (a > b ? a - b : b - a)
16 using namespace std;
17 const int MAX = 25;
18 int ans[MAX], used[MAX], n, N = 0;
19 void show();
20 void DFS(int pos);
21 int main()
22 {
23     sc(n);
24     CL(used, 0);
25     DFS(0);
26     cout << "种类为:" << N << endl;
27     return 0;
28 }
29 void DFS(int pos)
30 {
31     if(pos == n)
32     {
33         show();
34         N++;
35         return ;
36     }
37     used[pos] = 0;
38     DFS(pos+1);
39     used[pos] = 1;
40     DFS(pos+1);
41 }
42 void show()
43 {
44     int k = 0;
45     FOR(j,0,n-1)
46 //    PF(used[j]);
47     if(used[j])
48     {
49         PF(j+1);
50         k++;
51     }
52     if(!k)printf("空集");
53     cout << endl;
54 }
View Code

 

posted @ 2015-04-10 18:59  PastLIFE  阅读(129)  评论(0编辑  收藏  举报