深度优先搜索 全排列

参考:啊哈算法 p74页

 

递归的执行过程 

 

#include"stdio.h"

int n;//1-n的全排列 
int a[20];//默认初始化为零 
int book[20];//默认初始化为零 
void dfs(int step) //step 第几个数字 
{
    if(step==n+1)//判断是否可以结束递归/递归结束条件  
    {   int j;
        for(j=1;j<=n;j++)
        {
              printf("%d",a[j]);
        } 
        printf("\n");
        return ;
    }
    int i;
    for(i=1;i<=n;i++)
    {
        if(book[i]==0)//数字如果没有尝试过,当前进行尝试  
        {
         a[step]=i;
         book[i]=1;//book[i]用来标识i这个数字是否之前用过,book[i]等于1表示i已经被用过。 
         dfs(step+1);
         book[i]=0;//结束此次标记,这样下次的一条路径才能用这个数字。否则一条路径用了n个数字,用完了数字,没法玩了。  
        } 
}    

int main()
{
    scanf("%d",&n); 
    dfs(1);    
    return 0; 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章