增量构造法输出所有子集

来源:互联网 发布:查微信聊天记录软件 编辑:程序博客网 时间:2024/06/04 17:44

给定一个集合,元素为{0,1,2,3,4.。。。。。n},输出所有的子集

思路是一次选出一个元素放入到集合A中,A始终保持从小到大顺序,cur记录当前子集中元素个数,下一个递归的子集为A[cur-1] + 1到n中任意选一个数添加在A的末尾,表示子集个数加1.

#include <iostream>using namespace std;void print_subset(int n, int* A, int cur){for(int i = 0; i < cur; i++) cout<<A[i]<<" ";if(cur)cout<<endl;int s = cur ? A[cur-1] + 1 : 0;for(int i = s; i < n; i++){A[cur] = i;print_subset(n, A, cur+1);}}int main(){while(1){int n;cin>>n;int A[20];print_subset(n, A, 0);}}


原创粉丝点击