把 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
排列型應該是最簡單的
#include
using namespace std;
typedef
long
long ll;
int n;
int a[20]
;bool vis[20]
;void
dfs(
int pos)
for(
int i =
1; i <= n; i ++)}
}int
main()
狀態壓縮:
#include
#include
using namespace std;
int n;
vector<
int> path;
void
dfs(
int u,
int state)
for(
int i =
0; i < n; i ++)if
(!(state >> i &1)
)}intmain()
題解 《演算法競賽高階指南》遞迴實現排列型列舉
把 1 n 1 sim n 1 n 這 n n 10 n n lt 10 n n 10 個整數排成一行後隨機打亂順序,輸出所有可能的次序。按照從小到大的順序輸出所有方案,每行1個。首先,同一行相鄰兩個數用乙個空格隔開。其次,對於兩個不同的行,對應下標的數一一比較,字典序較小的排在前面。迴圈遍歷1 n...
演算法競賽高階指南 遞迴實現指數型列舉
從 1 n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。輸入乙個整數n。每行輸出一種方案。同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。對於沒有選任何數的方案,輸出空行。本題有自定義校驗器 spj 各行 不同方案 之間的順序任意。1 n 15 33 22 3 11 3 1 ...
遞迴實現組合型列舉 演算法競賽高階指南
從 1 n 這 n 個整數中隨機選出 m 個,輸出所有可能的選擇方案。輸入格式 兩個整數 n,m 在同一行用空格隔開。輸出格式 按照從小到大的順序輸出所有方案,每行1個。首先,同一行內的數公升序排列,相鄰兩個數用乙個空格隔開。其次,對於兩個不同的行,對應下標的數一一比較,字典序較小的排在前面 例如1...