DFS之排列數字

在這裏插入圖片描述 解題思路:題目要求是輸出所有方案,並且是按字典序,很自然的想到DFS(dfs的主要思想便是一種較爲暴力的搜索,就是一條路走到底,走不下去了再進行回溯,有時候還伴隨剪枝操作,非常適合一些暴力搜索可以解決的問題)。 AC代碼: #include using namespace std; const int N=10; int path[N],n; bool st[N]; void dfs(int u) { if(u==n) { for(int i=0;i<n;i++) cout<<path[i]<<’ '; cout<<endl; return; } for(int i=1;i<=n;i++) { if(!st[i]) { path[u]=i; st[i]=true; dfs(u+1); st[i]=false; } } } int main() { cin>>n; dfs(0); return 0; } 注意:對於DFS,當你的判斷變量變了的時候,在進行回溯是一定要記得復原。