增量构造法
#include<cstdio>
using namespace std;
const int maxn=1000+7;
int a[maxn];
int n;
void print_subset(int n,int* a,int cur)
{
for(int i=0;i<cur;i++) printf("%d ",a[i]);
printf("\n");
int s=cur?a[cur-1]+1:0;
for(int i=s;i<n;i++){
a[cur]=i;
print_subset(n,a,cur+1);
}
return ;
}
int main()
{
while(scanf("%d",&n)==1){
print_subset(n,a,0);
}
return 0;
}
位向量法
#include<cstdio>
using namespace std;
const int maxn=1000+7;
int b[maxn];
int n;
void print_subset(int n,int* b,int cur)
{
if(cur==n){
for(int i=0;i<n;i++){
if(b[i])printf("%d",i);
}
printf("\n");
return ;
}
b[cur]=0;
print_subset(n,b,cur+1);
b[cur]=1;
print_subset(n,b,cur+1);
}
int main(