排列問題(全排列的遞迴演算法問題)

2022-05-03 13:36:28 字數 1087 閱讀 6524

題目】設計乙個遞迴演算法生成n個元素的全排列。

演算法講解

設r=是要進行排列的n個元素,ri=r-。

集合x中元素的全排列記為perm(x)。

(ri)perm(x)表示在全排列perm(x)的每乙個排列前加上字首得到的排列。

r的全排列可歸納定義如下:

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

當n>1時,perm(r)由(r1)perm(r1),(r2)perm(r2),…,(rn)perm(rn)構成。

實現思想:將整組數中的所有的數分別與第乙個數交換,這樣就總是在處理後n-1個數的全排列。

示例

當n=3,並且e=,則:

下面是完整**:

1 #include 2 #include 3

4using

namespace

std;

56 template

7void perm(type list, int k, int

m )8

15else

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

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

1722}23

24int

main()

全排列問題(遞迴)

上次上課老師講了全排列演算法,現在剛剛看自己的寫的全排列演算法,看了好一會才看懂。應該是自己理解的不夠徹底 所以今天徹徹底底的來分析一下 先看圖 思路 先固定乙個字元,然後將固定的字元與它後面的每乙個進行交換,一直遞迴下去,直到固定的字元後面只有乙個字元 我們先看看圖,框外面的字元是被固定的字元,框...

遞迴演算法之全排列問題

2 數字全排列 numlist.pas in out 列出所有從數字1到數字n的連續自然數的排列,要求所產生的任一數字序列中不允許出現重複的數字。輸入乙個整數n 1 n 9 輸出由1 n組成的所有不重複的數字序列,每行乙個序列,數字與數字之間用空格隔開,行首行尾不留空格。樣例輸入 numlist.i...

全排列演算法 遞迴出口問題

1.使用全域性變數傳遞返回值2.利用標準輸入輸出裝置傳遞返回值 3.在函式引數中加入乙個預設入參用於遞迴之間傳遞 1.思路 n的全排列可以看做是在n 1全排列基礎上插入第n個數defg n result ifn 1 return 0 else forxing n 1 foriinrange n x....