[練習] dfs輸出全排列
阿新 • • 發佈:2018-12-24
程式碼:
另一種寫法,只改動了dfs函式#include <iostream> #include <string.h> using namespace std; int visit[11],num[11]; int n; void dfs(int depth) { if(depth>n)//注意是大於號,不是大於等於,因為在等於的時候num[depth]還沒有賦值 { for(int j=1;j<=n;j++) cout<<num[j]<<" "; cout<<endl; } else { for(int i=1;i<=n;i++) { if(!visit[i])//前提該數沒有被訪問 { visit[i]=1; num[depth]=i; dfs(depth+1); visit[i]=0;//返回原值,為新的排列做準備 } } } } int main() { while(cin>>n) { memset(visit,0,sizeof(visit)); dfs(1); } }
執行結果:#include <iostream> #include <string.h> using namespace std; int visit[11],num[11]; int n; void dfs(int depth) { for(int i=1;i<=n;i++) { if(!visit[i]) { visit[i]=1; num[depth]=i; if(depth==n) { for(int j=1;j<=n;j++) cout<<num[j]<<" "; cout<<endl; } else dfs(depth+1); visit[i]=0; } } } int main() { while(cin>>n) { memset(visit,0,sizeof(visit)); dfs(1); } }