您的位置:首页 > 其它

//子集生成总结

2016-03-06 09:41 417 查看
//子集生成
#include<iostream>
using namespace std;
#define MAXN 10
void print_subset(int *A,int n,int cur)//子集生成构造法
{
for(int i=0;i<cur;i++)
cout<<A[i];
cout<<endl;
int s=cur?A[cur-1]+1:0;//当cur为0时s为0,否则为上一个数加1
for(int i=s;i<n;i++)
{
A[cur]=i;
print_subset(A,n,cur+1);
}
}
void print_subset(int *A,int n,int cur)//向量构造法
{
if(cur==n)
{
for(int i=0;i<cur;i++)//输出
if(A[i])cout<<i;//标记加入的输出
cout<<endl;
A[cur]=1;//对每个数加入或不加入数组
print_subset(A,n,cur+1);
A[cur]=0;
print_subset(A,n,cur+1);
}
}

void print_subset(int n,int s)//二进制法
{
for(int i=0;i<n;i++)
if(s&1<<i)cout<<i;
cout<<endl;
}
void Subset(int n)
{
for(int i=0;i<(1<<n);i++)
print_subset(n,i);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: