遞迴實現全排列問題

2021-08-28 09:14:39 字數 780 閱讀 2403

有一組數r,需要輸出它的全排列。r的遞迴可定義如下:

當個數n為1時,perm(r) = (r),其中r是集合r中唯一的元素

當個數n大於1時,perm(r)由(r1)perm(r1),(r2)perm(r2),(r3)perm(r3),…,(rn)perm(rn)構成

其中ri = r - 即該集合中減去對應元素

遞迴地把這組數規模乙個乙個地縮小,如1,2,3,4. 先把1固定,遞迴地求2,3,4的全排列,又把2固定,遞迴地求3,4的全排列……直到只剩乙個數,輸出這個排列。當獲取遞迴陣列時,從該組數的第乙個,依次和每一位交換(包括本身),得以產生乙個新遞迴陣列(如1,2,3,4,先是1和1交換,產生新的2,3,4),當1和1交換產生的所有遞迴完成之後,實際上已經完成了1234,1243,1324,1342,1432,1423的輸出,因為1和自己交換之後,產生了2,3,4。在這個過程中,當1,2,3固定時,只有4剩餘,所以輸出1,2,3,4.然後固定1,2,交換3,4的位置。輸出1,2,4,3.此時1,2固定的已經全部輸出,於是返回到只有1固定,那麼此時2需要與3交換位置,再進行1,3固定的遞迴。如下圖所示:

else //還有多個元素待排列,遞迴產生排列

for (int i=k; i<=m; i++)

}int main()

遞迴實現全排列問題

目錄 描述思路 輸出 正文 描述 問題是有一組數r,需要輸出它的全排列。r的遞迴可定義如下 當個數n為1時,perm 其中r是集合r中唯一的元素 當個數n大於1時,perm 由 r1 perm r1 r2 perm r2 r3 perm r3 rn perm rn 構成 其中ri r 即該集合中減去...

全排列問題詳解 遞迴實現

給定乙個正整數n,輸出1 n的全排列 首先,根據遞迴的思想,我們可以把求1 n的全排列這個大問題分解為先固定1,求剩下的n 1個數的全排列,在固定2,固定3 依次類推。而對於剩下的這n 1個數,同樣採用這種方法,取裡面的第乙個數,放到當前排列的第乙個位置,再取第二個數放到第乙個位置 即 對於1,2,...

遞迴實現全排列

生成全排列的最簡單的遞迴方法的思想 1.可以把幾個數字分成前半部和最後一位。對於0123這四個數來說,最後一位 紅色字型 所出現的情況只有以下四類 先不管前三個數的排列組合情況 3 2 1 0這樣我們就把四個數字的排列問題,變成了3個 對於上述的每一行來說 2.終結條件是1個數字的排列就是其本身。直...