几种求子集方法

增量构造法,位向量法,二进制法

#include<bits/stdc++.h>
using namespace std;
int a[100];
void print_sub(int* A,int cur,int n){
	for(int i=0;i<cur;i++)
	cout<<A[i]<<' ';
	cout<<endl;
	int s=cur?A[cur-1]+1:1;
	for(int i=s;i<=n;i++)
	{
		A[cur]=i;
	print_sub(A,cur+1,n);
}
} 
int main(){
	int n;
	while(cin>>n){
		print_sub(a,0,n);
	} 
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
int a[100];
void print_sub(int* b,int n,int cur){
	if(cur==n)
	{
		for(int i=0;i<n;i++)
		if(b[i]) cout<<i+1<<' ';
		cout<<endl;
		return;
	}
	 b[cur]=1;
	 print_sub(b,n,cur+1);
	 b[cur]=0;
	 print_sub(b,n,cur+1);
}
int main(){
	int n;
	while(cin>>n){
		print_sub(a,n,0); 
	}
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
void print_sub(int n,int cur){
	for(int i=0;i<n;i++)
	if(cur&(1<<i)) printf("%d ",i+1);
	printf("\n");
}
int main(){
  int n;
  while(cin>>n){
  	for(int i=0;i<(1<<n);i++)
  	print_sub(n,i);
  }
	return 0;
}
posted @ 2018-08-15 20:38  ChunhaoMo  阅读(341)  评论(0)    收藏  举报