1. 程式人生 > >『模板』 子集生成

『模板』 子集生成

clas 位向量法 name main mes using span ret n)

兩種方法:

1.增量構造法

2.位向量法

(ps:懶得分開寫就寫一起了)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int zh[1001];//用於法一
 4 bool xl[1001];//用於法二
 5 void print(int s[],int n){
 6     for(int i=0;i<n;i++)  //用於法二
 7     if(xl[i]) cout<<s[i]<< ;
 8     cout<<endl;
 9 }
10 void ps1(int s[],int n,int
pos=0){ 11 for(int i=0;i<pos;i++){ //法一 12 cout<<zh[i]<<" "; 13 } 14 cout<<endl; 15 int m=pos ? zh[pos-1]:0; 16 for(int i=0;i<n;i++){ 17 if(s[i]>m){ 18 zh[pos]=s[i]; 19 ps1(s,n,pos+1); 20 } 21 } 22 }
23 void ps2(int s[],int n,int pos=0){ 24 if(pos==n){ 25 print(s,n);//法二 26 return 0; 27 } 28 xl[pos]=1; 29 ps2(s,n,pos+1); 30 xl[pos]0; 31 ps2(s,n,pos+1); 32 } 33 int main(){ 34 int d[30000]; 35 int n,r; 36 cin>>n>>r; 37 for(int i=0;i<n;i++){
38 d[i]=i+1; 39 } 40 ps1(d,n); 41 ps2(d,n); 42 return 0; 43 }

還有一種二進制法由於我不會某些原因以後懶得補上

先獻上圖片技術分享圖片

『模板』 子集生成