把 1~n這n個整數排成一行後隨機打亂順序,輸出全部可能的次序。spa
一個整數n。code
按照從小到大的順序輸出全部方案,每行1個。blog
首先,同一行相鄰兩個數用一個空格隔開。遞歸
其次,對於兩個不一樣的行,對應下標的數一一比較,字典序較小的排在前面。it
1≤n≤9io
3
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
#include <cstdio> const int N = 10; int state[N]; // 0:表示沒放數,1~n:表示放了哪一個數 bool used[N]; //true:表示用過,flase:表示未使用 int n; void dfs(int u) { if (u == n + 1) { for (int i = 1; i <= n; i ++) printf("%d ", state[i]); printf("\n"); return; } for (int i = 1; i <= n; i ++) { if (!used[i]) { state[u] = i; used[i] = true; dfs( u + 1); //恢復現場 state[u] = 0; //能夠去掉 used[i] = false; } } } int main() { scanf("%d", &n); dfs(1); return 0; }