生活随笔
收集整理的這篇文章主要介紹了
算法竞赛入门经典读书笔记(三)7.2枚举排列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
7.2.1生成1~n的所有排列
遞歸調用的方法可以實現。
[cpp]?view plaincopy
#include?<iostream>?? using?namespace?std;?? void?print_permutation(int?n,int?*A,int?cur){?? int?i,j;?? if(cur==n){?? for(i=0;i<n;i++)??? cout<<A[i];?? cout<<endl;?? }?? else?for(i=1;i<=n;i++){?? int?ok=1;?? for(j=0;j<cur;j++)?? if(A[j]==i)?ok=0;?? if(ok){?? A[cur]=i;?? print_permutation(n,A,cur+1);?? }?? }?? }?? int?main()?? {?? int?n,A[100],cur=0;?? cout<<"請輸入整數n(n<=100):\n";?? while(cin>>n)?? {?? for(int?i=0;i<n;i++){?? A[i]=i+1;?? }??? print_permutation(n,A,cur);?? }?? return?0;?? }??
生成可重集的排序
[cpp]?view plaincopy
#include?<iostream>?? #include?<algorithm>?? using?namespace?std;?? void?print_permutation(int?n,int?*P,int?*A,int?cur){?? ????int?i,j;?? ????if(cur==n){?? ????????for(i=0;i<n;i++)??? ????????cout<<A[i]<<"?";?? ????????cout<<endl;?? ????}?? ????else?for(i=0;i<n;i++)?? ????????if(!i||P[i]!=P[i-1]){?? ????????int?c1=0,c2=0;?? ????????for(j=0;j<cur;j++)?if(A[j]==P[i])?c1++;?? ????????for(j=0;j<n;j++)?if(P[j]==P[i])?c2++;?? ????????if(c1<c2){?? ????????????A[cur]=P[i];?? ????????????print_permutation(n,P,A,cur+1);?? ????????}?? ????}?? }?? int?main()?? {?? ????int?n,A[100],cur;?? ????int?P[100];?? ????cin>>n;?? ????for(int?i=0;i<n;i++)?? ??????cin>>P[i];?? ????sort(P,P+n);?????? ????cur=0;?? ????print_permutation(n,P,A,cur);?? ????return?0;?? }??
附:利用STL中的algorithm也可以~~灰常簡單地說
[cpp]?view plaincopy
#include?<iostream>?? #include?<algorithm>?? using?namespace?std;?? int?main()?? {?? int?n,A[100],cur=0;?? cout<<"請輸入整數n(n<=100):\n";?? cin>>n;?? int?i;?? for(i=0;i<n;i++){?? A[i]=i+1;?? }??? do{?? for(i=0;i<n;i++)??? cout<<A[i];?? cout<<endl;?? }while(next_permutation(A,A+i));?? return?0;?? }??
利用stl生成給定集合的全排列
[cpp]?view plaincopy
#include<iostream>?? #include<algorithm>?? using?namespace?std;?? int?main(){?? int?n,p[10];?? cin>>n;?? for(int?i=0;i<n;i++){?? cin>>p[i];?? }?? cout<<endl;?? sort(p,p+n);?? do{?? for(int?i=0;i<n;i++)?? cout<<p[i]<<"?";?? cout<<endl;?? }while(next_permutation(p,p+n));?? return?0;?? } ?
總結
以上是生活随笔為你收集整理的算法竞赛入门经典读书笔记(三)7.2枚举排列的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。