输入n,输出「1~n」的幂集。
位运算
#include<iostream>
using namespace std;
int n;
void dfs(int u, int k){
if(u == n){
for(int i = 0; i < u; i ++)
if(k >> i & 1) cout << i + 1 << ' ';
cout << endl;
return;
}
dfs(u + 1, k);
dfs(u + 1, k | (1 << u));
}
int main(){
cin >> n;
dfs(0, 0);
}
一般方法
#include<iostream>
using namespace std;
const int N = 20;
int res[N];
int n;
void dfs(int k){
if(k == n + 1){
for(int i = 1; i <= n; i ++)
if(res[i]) cout << i << ' ';
cout << endl;
return;
}
res[k] = 1;
dfs(k + 1);
res[k] = 0;
dfs(k + 1);
}
int main(){
cin >> n;
dfs(1);
return 0;
}