question:92. 递归实现指数型枚举 - AcWing题库
thought:每次写递归的时候可以想一个递归搜索树
92是判断选还是不选,选的话就标记为true,不选为false,每次递归都会走到底,每个分支递归完回来的时候要标记他没选的情况,然后再递归。
#include <iostream>
using namespace std;
const int N = 20;
int n;
bool st[N];
void dfs(int u){
if(u > n){
for(int i = 1;i <= n; i ++){
if(st[i]) cout << i << ' ';
}
cout << endl;
return;
}
st[u] = true;//选择当前树的分支
dfs(u + 1);
st[u] = false;//不选当前数的分支
dfs(u + 1);
}
int main(){
cin >> n;
dfs(1);
return 0;
}