題目
把 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輸...