算法竞赛入门经典读书笔记(四)7.3子集生成
2015-05-13 17:44
134 查看
输入一个数n,输出集合0,1,2,3,n-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]<<" ";
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(){
cout<<"请输入一个数,输出集合0,1,2,3,n-1的全部子集\n";
int n,cur=0;
cin>>n;
int A[100];
print_subset(n,A,cur);
}
方法二:位向量法
#include <iostream>
using namespace std;
void print_subset(int n,int *A,int cur){
if(cur==n){
for(int i=0;i<cur;i++)
if(A[i])cout<<i<<" ";
cout<<endl;
return;
}
A[cur]=1;
print_subset(n,A,cur+1);
A[cur]=0;
print_subset(n,A,cur+1);
}
int main(){
cout<<"请输入一个数,输出集合0,1,2,3,n-1的全部子集\n";
int n,cur=0;
cin>>n;
int A[100];
print_subset(n,A,cur);
}
二进制法
#include <iostream>
using namespace std;
void print_subset(int n,int s){
for(int i=0;i<n;i++)
if(s&(1<<i)) cout<<i;
cout<<endl;
}
int main(){
cout<<"请输入一个数,输出集合0,1,2,3,n-1的全部子集\n";
int n;
cin>>n;
for(int i=0;i<(1<<n);i++)
print_subset(n,i);
}
方法一:增量构造法:
#include <iostream>
using namespace std;
void print_subset(int n,int *A,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(n,A,cur+1);
}
}
int main(){
cout<<"请输入一个数,输出集合0,1,2,3,n-1的全部子集\n";
int n,cur=0;
cin>>n;
int A[100];
print_subset(n,A,cur);
}
方法二:位向量法
#include <iostream>
using namespace std;
void print_subset(int n,int *A,int cur){
if(cur==n){
for(int i=0;i<cur;i++)
if(A[i])cout<<i<<" ";
cout<<endl;
return;
}
A[cur]=1;
print_subset(n,A,cur+1);
A[cur]=0;
print_subset(n,A,cur+1);
}
int main(){
cout<<"请输入一个数,输出集合0,1,2,3,n-1的全部子集\n";
int n,cur=0;
cin>>n;
int A[100];
print_subset(n,A,cur);
}
二进制法
#include <iostream>
using namespace std;
void print_subset(int n,int s){
for(int i=0;i<n;i++)
if(s&(1<<i)) cout<<i;
cout<<endl;
}
int main(){
cout<<"请输入一个数,输出集合0,1,2,3,n-1的全部子集\n";
int n;
cin>>n;
for(int i=0;i<(1<<n);i++)
print_subset(n,i);
}
相关文章推荐
- 算法竞赛入门经典读书笔记(四)7.3子集生成
- 《算法竞赛入门经典》-【第七章:暴力求解法】-7.3:子集生成
- 读《算法竞赛入门经典》 7.3子集生成
- 《算法竞赛入门经典》-7.3-子集生成
- 【算法竞赛入门经典】7.3子集生成【增量构造法】【位向量法】【二进制法】
- 7.3 子集生成
- 7.3子集生成
- 子集生成_二进制法
- 7.3.2(子集生成1)
- 生成1~~n的排列 && 子集
- 子集生成
- 子集生成算法
- 子集生成算法
- UVA1151[Buy or Build] 子集枚举+最小生成树
- 子集生成算法合集
- UVA - 11205 The broken pedometer (子集生成)
- uva 11205 The broken pedometer(暴力枚举+子集生成)
- 入门经典 第七章 7.3.3 二进制生成子集
- 子集生成
- 子集生成