全排列問題 (dfs)
阿新 • • 發佈:2022-03-13
題目描述
按照字典序輸出自然數 11 到 nn 所有不重複的排列,即 nn 的全排列,要求所產生的任一數字序列中不允許出現重複的數字。
輸入格式
一個整數 nn。
輸出格式
由 1 \sim n1∼n 組成的所有不重複的數字序列,每行一個序列。
每個數字保留 55 個場寬。
輸入輸出樣例
輸入 #13輸出 #1
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
說明/提示
1<=n<=9
第一次學習DFS#include<iostream> #include<cstring>//memset函式的標頭檔案 using namespace std; int n, st[30];//是否用過 int ans[30];//結果; void dfs(int x)//x代表下標:第一個數第二個數... { //邊界條件:當到低n個數的時候; if (x > n) { for (int i = 1; i <= n; i++) printf("%5d", ans[i]); cout << endl; return; } //從一開始排列,用過的就不排;for (int i = 1; i <= n; i++) { if (st[i] == 0)//沒來過 { st[i] = 1; ans[x] = i; dfs(x + 1); st[i] = 0; } } } int main() { cin >> n; memset(st, 0, sizeof(st)); dfs(1); return 0; }