集合的全排列問題(遞迴實現)
阿新 • • 發佈:2018-11-11
設R={r1,r2,r3,.....rn}要進行全排列的n個元素,集合X中元素的全排列記為perm(X),則(ri)perm(X)表示在全排列perm(X)的每一個排列前加上字首ri得到的排列。R的全排列定義可歸納定義如下:
當n=1時,perm(R) = (r),其中r為集合R中唯一元素
當n>1時,perm(R)由(r1)perm(R1)、(r2)perm(R2).........構成
因此可以設計全排列的遞迴演算法;
//產生元素k—m的全排列,作為k-1個元素的字尾 void Perm(int list[], int k, int m){ //構成一次全排列,輸出結果if( k == m ){ for( int i = 0; i < m; i++ ) cout<<list[i]<<" "; cout<<endl; } else{ //在陣列list中,產生元素k—m的全排列 for( int j = k; j <= m; j++){ swap(list[k],list[j]); Perm(list,k+1,m); swap(list[k],list[j]); } } }