【DFS】全排列問題
阿新 • • 發佈:2018-12-17
題目
輸出自然數 1 到 n 所有不重複的排列,即 n 的全排列,要求所產生的任一數字序列中不允許出現重複的數字。
輸入
n(1≤n≤9)
輸出
由 1~n 組成的所有不重複的數字序列,每行一個序列。
樣例輸入#1
3
樣例輸出#2
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
題解
這道題可以說非常經典了,思路很簡單,唯一值得注意的是輸出的順序
話不多說,上程式碼
#include<bits/stdc++.h> using namespace std; int a[10], k[10], n; void dfs(int step) { if(step == n + 1) { for(int i = 1; i <= n; i++) cout << a[i] << " "; cout << endl; return; } for(int i = 1; i <= n; i++) { if(k[i] == 0) { a[step] = i; k[i] = 1; dfs(step + 1); k[i] = 0; } } return; } int main() { cin >> n; dfs(1); return 0; }