现在的位置: 首页 > 综合 > 正文

全排列 DFS实现

2013年09月09日 ⁄ 综合 ⁄ 共 396字 ⁄ 字号 评论关闭


#include<iostream>  
#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++)
    {  
        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;  
}  

抱歉!评论已关闭.