luogu【P1706】全排列問題
阿新 • • 發佈:2019-01-23
思路:最近發現自己對dfs的理解不夠深透於是寫了一個最基礎的dfs然後分析了一下QwQ
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int a[10001]; int n; int v[10001]; int dfs (int m)//一定要注意這個引數代表的是遞迴的層數 { if (m-1==n)//當遞迴層數足夠且產生滿足條件的解時輸出 { for (int i=1;i<=n;i++) cout<<" "<<a[i]; cout<<endl; return 0; } for (int i=1;i<=n;i++)//列舉每個層數的可行節點 { if (v[i]==0)//如果尚未訪問則加入可行解 { a[m]=i; v[i]=1; dfs(m+1); v[i]=0;//回溯的過程 一層遞迴後將選過的節點重新加入 } } } int main () { cin>>n; dfs(1); return 0; }