子集生成

来源:互联网 发布:淘宝卖家学院光云科技 编辑:程序博客网 时间:2024/05/01 15:50

从书上学会了1~n的子集生成方法,在此贴出三种方法,是不是只能进行0~n的集合,博主想实现任意集合的子集输出,但只想出位向量法的,若有会的请赐教

#include<iostream>//第一种方法:二进制法using namespace std;voidprint(int n,int s){    for(int i=0;i<n;i++)        if(s&(1<<i))cout<<i;        cout<<endl;}int main(void){    int n=4;    for(int i=0;i<(1<<n);i++)        print(n,i);    return 0;}
#include<iostream>using namespace std;int p[4]={1,2,3,4};//第二种方法:位向量法void print(int n,int *a,int cur){    if(n==cur){        for(int i=0;i<cur;i++)            if(a[i])cout<<p[i]<<" ";        cout<<endl;        return ;    }    a[cur]=1;    print(n,a,cur+1);    a[cur]=0;    print(n,a,cur+1);}int main(void){    int a[4];    print(4,a,0);    return 0;}
#include<iostream>//第三种方法:增量构造法using namespace std;voidprint(int n,int *p,int cur){    for(int i=0;i<cur;i++)        cout<<p[i]<<" ";    cout<<endl;    int s=cur?p[cur-1]+1:0;    for(int i=s;i<n;i++){        p[cur]=i;        print(n,p,cur+1);    }}int main(void){    int p[4];    print(4,p,0);    return 0;}
0 0
原创粉丝点击