//子集生成
#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);
}
//子集生成总结
最新推荐文章于 2022-04-13 14:28:55 发布