[练习] 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); } }运行结果: