递归实现指数型枚举(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;
}

 

posted @ 2020-10-28 19:49  liyexin  阅读(132)  评论(0编辑  收藏  举报