1. 程式人生 > >集合的全排列問題(遞歸實現)

集合的全排列問題(遞歸實現)

for code spa int 每一個 因此 color style []

設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]); } } }

集合的全排列問題(遞歸實現)