输入n
输出1到n这个集合中包含的所有子集
/*
//方法一:
//思路:构造一个位向量visit,而不是直接构造子集A本身
#include<iostream>
using namespace std;
void fun(int *visit, int cur, int n)
{
if(cur == n+1)
{
for(int i = 1;i <= n;++ i)
if(visit[i])
cout << i << ' ';
cout<<endl;
return;
}
visit[cur] = true;
fun(visit,cur+1,n);
visit[cur] = false;
fun(visit,cur+1,n);
}
int main()
{
int n;
cout<<"输入n,产生集合1到n中所有的子集。"<<endl;
while(cin >> n)
{
bool *visit=new bool[n + 1];
for(int i = 1;i <= n;++ i)
visit[i] = false;
fun(a,1,n);
}
return 0;
}
*/
//方法二:
//思路:一次选出一个元素放到集合中
#include<iostream>
using namespace std;
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;
for(int i = s;i < n; ++ i)
{
A[cur] = i;
print_subset(A,n,cur + 1);
}
}
int main()
{
int n;
cout<<"输入n,产生集合1到n中所有的子集。"<<endl;
while(cin >> n)
{
int *A=new int[n + 1];
for(int i = 1;i <= n;++ i)
A[i] = i;
print_subset(A,n,1);
}
return 0;
}