1. 程式人生 > 其它 >全排列問題 (dfs)

全排列問題 (dfs)

題目描述

按照字典序輸出自然數 11 到 nn 所有不重複的排列,即 nn 的全排列,要求所產生的任一數字序列中不允許出現重複的數字。

輸入格式

一個整數 nn。

輸出格式

由 1 \sim n1n 組成的所有不重複的數字序列,每行一個序列。

每個數字保留 55 個場寬。

輸入輸出樣例

輸入 #1
3
輸出 #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; }