递归实现指数型枚举

递归实现指数型枚举

状态压缩:

分别遍历每一个状态即可。

#include<iostream>
using namespace std;
int main(){
    int n;cin>>n;
    for(int i=0;i<=(1<<n)-1;++i){
        bool flag=0;
        for(int j=0;j<=n-1;++j)
            if(i>>j&1) cout<<(flag?" ":"")<<j+1,flag=1;
        cout<<"\n";
    }
}

递归方法:

对每一个数字进行选择

n=int(input())
def dfs(i,x):
    if i==n:
        for j in range(n):
            if x>>j&1==1:
                print(j+1,end=' ')
        print("")
        return
    dfs(i+1,x)
    dfs(i+1,x|1<<i)
dfs(0,0)
posted @ 2020-02-26 15:24  caoanda  阅读(149)  评论(0编辑  收藏  举报