算法竞赛入门经典读书笔记(四)7.3子集生成
輸入一個(gè)數(shù)n,輸出集合0,1,2,3,n-1的全部子集
方法一:增量構(gòu)造法:
#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<<"請輸入一個(gè)數(shù),輸出集合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<<"請輸入一個(gè)數(shù),輸出集合0,1,2,3,n-1的全部子集\n";
int?n,cur=0;
cin>>n;
int?A[100];
print_subset(n,A,cur);
}
二進(jìn)制法
#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<<"請輸入一個(gè)數(shù),輸出集合0,1,2,3,n-1的全部子集\n";
int?n;
cin>>n;
for(int?i=0;i<(1<<n);i++)
print_subset(n,i);
}
總結(jié)
以上是生活随笔為你收集整理的算法竞赛入门经典读书笔记(四)7.3子集生成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法竞赛入门经典读书笔记(二)7.1简单
- 下一篇: 算法竞赛入门经典读书笔记(三)7.2枚举