DFS之全排列

来源:互联网 发布:dota2天梯淘宝买账号 编辑:程序博客网 时间:2024/04/30 00:15


#define LOCAL
#include<iostream>
#include<string.h>
#define N 15
using namespace std;
int n,ans[N],visit[N];
void DFS(int depth)
{
 int i,j;
 for(i=1;i<=n;i++)//从1到n对数表扫描一遍
 {
  if(!visit[i])//看哪个数字未被访问就访问之
  {
   visit[i]=1;//标记为已访问
   ans[depth]=i;//将该数字填表
  if(depth<n)//如果没有填到n
   DFS(depth+1);//填depth+1
   else//如果填表完毕
   {
   for(j=1;j<=n;j++)//输出结果
    cout<<ans[j]<<"";
   cout<<endl;
   }
  visit[i]=0;//访问完毕返回标记为可访问
  //注意这一句只有当填表完毕输出了结果后才有可能执行到
   //填表完毕表示一个排列已经产生
   //该数自然可以恢复自由身继续被访问了
  }
 }
}
int main()
{


   while(cin>>n)
    {
  memset(visit,0,sizeof(visit));
   DFS(1);//从1开始往后填表
    }
  return 0;
}

0 0
原创粉丝点击