递归实现指数型枚举(DFS)
Acwing地址:https://www.acwing.com/problem/content/94/
看图:
所以就是当前的数,选与不选的问题:
vis[x]=1; //选 dfs(x+1); vis[x]=0; dfs(x+1); //不选
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int n; int vis[20]; int cnt=0; void dfs(int x) { if(x>n) { cnt++; for(int i=1;i<=n;i++) if(vis[i]) cout<<i<<" "; cout<<endl; return ; } vis[x]=1; dfs(x+1); vis[x]=0; dfs(x+1); } int main() { cin>>n; // cout<<endl; dfs(1); // cout<<cnt<<endl; return 0; }