小旭讲解 基础算法系列 - 生成子集
小旭讲解 基础算法系列 - 生成子集

视频讲解

代码

#include<bits/stdc++.h>
using namespace std;
// n 代表 0~n-1,输出所有组合情况
int main() {
    int n;
    cin>>n;
    vector<string> B{""};
    // i from 0 -> n-1
    for(int i = 0; i < n; ++i) {
        for (int j = B.size();j--;) B.push_back(B[j]+to_string(i));
    }
    for(auto &v:B) cout<<v<<endl;
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
int n, B[maxn];
// n 代表 0~n-1,输出所有组合情况
void print_subset(int n, int *B, int cur) {
    // cur 要访问第 cur 个元素(从0开始计数)
    if (cur == n) {
        for(int i = 0; i < n; ++i) if (B[i]) printf("%d ", i);
        printf("\n");
        return;
    }
    // 使用
    B[cur] = 1;
    print_subset(n, B, cur+1);
    B[cur] = 0;
    // 不使用
    print_subset(n, B, cur+1);
}
int main() {
    cin>>n;
    memset(B,0,sizeof B);
    print_subset(n, B, 0);
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
// n 代表 0~n-1,输出所有组合情况
int n;
void print_subset(int s) {
    for (int i=0;i<n;++i) {
        if (s&(1<<i)) printf("%d ", i);
    }
    printf("\n");
}
int main() {
    cin>>n;
    for (int i=0;i<=(1<<n)-1;++i) {
        print_subset(i);
    }
    return 0;
}

参考

[1]. 刘汝佳. 算法竞赛入门经典 第 2 版[M]. 北京:清华大学出版社,2014:188-189

欢迎分享,引用。若转载,请联系我,谢谢配合。
本文地址:https://qoogle.top/xiaoxu-tutorial-bas-generate-subset/
0 0 vote
Article Rating
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments