给定一个集合,元素为{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);
}
}