全排列 非遞迴

2021-08-25 08:40:45 字數 824 閱讀 7092

> description

列出所有數字1到數字n的連續自然數的排列,要求所產生的任一數字序列中不允許出現得復數字。

> input

輸入:n(1<=n<=9)

> output

由1~n組成的所有不重複的數字序列,每行乙個序列。

> sample input

3> sample output

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

> 解題思路

先計算出輸出的行數(即p(n,n)),用for語句迴圈:

輸出全排列,在這一組全排列的基礎上形成第二組全排列

① 從後面向前找,直到找到乙個順序(由大到小)為止。

② 然後在a[j],a[j+1],…,a[r]中找出乙個比a[j-1]大的最小的數。

③ 交換a[p]與a[j-1]。

④ 再將a[j],a[j+1],…,a[r]由小到大排序。

> **

#include

#include

#include

using namespace std;

int s=

1,a[10]

,n;void

lil()}

int main()

非遞迴全排列實現

include include include include include include include includeusing namespace std const int max size 1000 尋找下乙個排列 假設 某個序列為 d1 d2 d3 dn 那麼在dn前找第乙個 比dn...

非遞迴實現全排列

要求 使用非遞迴的方法按照字典序輸出全排列 思路 這次以 1 5 4 3 2 為例,下乙個排列是 2 1 3 4 5 從後往前找,找到第乙個連續遞增的兩個數字,找到了 1 5 重新從後往前找,找到第乙個大於 1 的數字,找到了 2 1 就是步驟三中找到的第乙個數字 找到 2 之後,將 1 和 2 互...

python非遞迴全排列

剛剛開始學習python,按照廖雪峰的 看的,當前看到了函式這一節。結合陣列操作,寫了個非遞迴的全排列生成。原理是插入法,也就是在乙個有n個元素的已有排列中,後加入的元素,依次在前,中,後的每乙個位置插入,生成n 1個新的全排列。因為python切割陣列或者字串,以及合併比較方便,所以,程式會節省很...