『模板』 子集生成
阿新 • • 發佈:2018-02-27
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,intpos=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 }
還有一種二進制法由於我不會某些原因以後懶得補上
先獻上圖片
『模板』 子集生成