排列組合(Permutations)
阿新 • • 發佈:2019-02-03
//排列組合(Permutations) //a,b,c a,c,b //b,a,c b,c,a //c,a,b c,b,a #include <iostream> using namespace std; /* void Permutations(char *p,const int k,const int m) { //a開頭的,後面跟著bc的所有排列 swap(p[0],p[0]); //為了與後面構成迴圈 Permutations(p,1,2); swap(p[0],p[0]); //b開頭的,後面跟著ac的所有排列 swap(p[0],p[1]);//a和b交換,bac,bca Permutations(p,1,2); swap(p[0],p[1]);//a和b再換回來 //c開頭的,後面跟著ab的所有排列 swap(p[0],p[2]);//a和c交換 Permutation(p,1,2); swap(p[0],p[2]);//a和c再換回來 } */ void Permutations(char *p,const int k,const int m) { if(k==m){ //已經遞迴到最後一個字元,不需要再遞迴 for(int i=0;i<=m;i++) cout<<p[i]; cout<<endl; } else{ for(int i=k;i<=m;i++){ swap(p[k],p[i]);//k不變,i是變化的 Permutations(p,k+1,m); swap(p[k],p[i]);//還原 } } } int main() { char s[]="abc"; Permutations(s,0,2); return 0; } //整個過程: //a_bc //a與a交換,b與b交換,輸出abc //a與a交換,b與c交換,輸出acb //b_ac //a與b交換,a與a交換,輸出bac //a與b交換,a與c交換,輸出bca //c_ba //a與c交換,b與b交換,輸出cba //a與c交換,b與a交換,輸出cab