遞迴實現排列型列舉

2021-10-06 06:52:16 字數 864 閱讀 4609

題目

把 1~n 這 n 個整數排成一行後隨機打亂順序,輸出所有可能的次序。

輸入格式

乙個整數n。

輸出格式

按照從小到大的順序輸出所有方案,每行1個。

首先,同一行相鄰兩個數用乙個空格隔開。

其次,對於兩個不同的行,對應下標的數一一比較,字典序較小的排在前面。

資料範圍

1≤n≤9

輸入樣例:

3輸出樣例:

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

思路

這道題採用dfs演算法,利用遞迴實現

#include

using

namespace std;

const

int n=10;

int n;

bool st[n]=;

int a[n]

;void

dfs(

int x)

for(i=

0;i}int

main()

a[n]是用來存放結果的陣列,st[n]是乙個布林型別的陣列,用來表示該位加1的數是否被取過,例如st[0]=false表示數字1沒有被取過,st[1]=true表示數字2被取過了,

dfs函式中,形參x表示位數,當進行到第n位時,則dfs函式結束

當x!=n時,判斷第x位有沒有被取過,如果沒有,就將這個數放在結果a陣列中,並將st陣列相應的地方置為1,遞迴的呼叫dfs函式,判斷x的下一位是否滿足條件,直到x為n,遞迴結束,輸出結果

遞迴實現排列型列舉

遞迴實現排列型列舉 94.遞迴實現排列型列舉 題目提交記錄 討論題解 把 1 nn 這 nn 個整數排成一行後隨機打亂順序,輸出所有可能的次序。輸入格式 乙個整數n。輸出格式 按照從小到大的順序輸出所有方案,每行1個。首先,同一行相鄰兩個數用乙個空格隔開。其次,對於兩個不同的行,對應下標的數一一比較...

遞迴實現排列型列舉

問題 k 遞迴實現排列型列舉 時間限制 1 sec 記憶體限制 128 mb 提交 狀態 題目描述 把 1 n 這 n n 10 個整數排成一行後隨機打亂順序,輸出所有可能的次序。輸入乙個整數n。輸出按照從小到大的順序輸出所有方案,每行1個。首先,同一行相鄰兩個數用乙個空格隔開。其次,對於兩個不同的...

遞迴實現排列型列舉

把 1 nn 這 nn 個整數排成一行後隨機打亂順序,輸出所有可能的次序。輸入格式 乙個整數n。輸出格式 按照從小到大的順序輸出所有方案,每行1個。首先,同一行相鄰兩個數用乙個空格隔開。其次,對於兩個不同的行,對應下標的數一一比較,字典序較小的排在前面。資料範圍 1 n 91 n 9 輸入樣例 3輸...