递归指数型枚举

输入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;
}
posted @ 2020-08-02 13:54  yys_c  阅读(113)  评论(0编辑  收藏  举报