為什麼在MySQL中不建議使用UTF-8
阿新 • • 發佈:2021-01-04
遞迴實現排列型列舉
題目描述
把 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遞迴的方式來進行不同的填數,st[i]=1表示選擇這個數,used[i]=true表示這個數已經被使用過。
一共有n!個dfs()分支,每個分支中都有一個時間複雜度為O(n)的迴圈。
時間複雜度:O(n*n!)
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 10; int n,st[N]; bool used[N]; void dfs(int u) { if(u > n) { for(int i=1;i<=n;i++)printf("%d ",st[i]); puts(""); return ; } for(int i=1;i<=n;i++) { if(!used[i]) { st[u] = i; used[i] = true; dfs(u+1); st[u] = 0; used[i] = false; } } } int main() { cin >> n; dfs(1); return 0; }