递归实现指数型枚举

 

 

代码:

 

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 const int N =20;
 8 int n;
 9 int s[N]; // 0 没考虑, 1 选它, 2 没选他
10 int cnt = 0;
11 
12 void dfs(int u)
13 {
14     if(u > n) // 选够了n个数 或者说考虑够了n个数
15     {
16         for(int i = 1; i <= n; i++)
17         {
18             if(s[i] == 1)
19             {
20                 cout << i << ' ';
21             }
22 
23         } // 输出这一组考虑了的数字
24         
25         cnt ++; // 一组情况 + 1 
26         
27         cout << endl;  // 换行 退出这个分支
28         return ;
29         
30     }
31     
32     // 不选
33     s[u] =  2;
34     dfs(u + 1);
35     s[u] = 0;
36     
37     s[u] = 1;
38     dfs(u+1);
39     s[u] =0 ;
40     
41 }
42 
43 int main()
44 {
45     cin  >> n;
46     
47     dfs(1);
48     // cout << cnt << endl;
49     
50     
51     
52     return 0;
53 }

 

posted @ 2021-04-17 16:30  Leo-aiolia-bao  阅读(55)  评论(0编辑  收藏  举报