递归实现指数型枚举
状态压缩:
分别遍历每一个状态即可。
#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)
CAD加油!欢迎跟我一起讨论学习算法,QQ:1401650042