排列總方案數(全都要選)
阿新 • • 發佈:2022-12-06
遞迴實現排列型列舉
把 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
圖解
Code
點選檢視程式碼
#include<iostream> using namespace std; int n; bool st[20]; //是否選過 int ways[20]; //儲存方案 void dfs(int x){ //選到第x位 if(x > n){ //選到第n+1位,即得到一種方案 for(int i = 1; i <= n; i ++ ){ //輸出方案 cout << ways[i] << " "; } puts(""); } for(int i = 1; i <= n; i ++ ){ //列舉每一位 if(!st[i]){ //如果沒選過 st[i] = 1; ways[x] = i; //選i dfs(x + 1); //選下一位 ways[x] = 0; //恢復現場 st[i] = 0; } } } int main(){ cin >> n; dfs(1); //從第一位開始選 }