递归实现指数型枚举
代码:
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 }