首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图

DFS有序数列的全排列

2014-06-18 来源:读书人网 【读书人网(Reader8.cn):综合教育门户网站】
DFS求一个有序数列的全排列!1 2 3 5 8 13 21 34比如给这八个数在其中选取六个;按升序输出选取的数字如下:1

DFS求一个有序数列的全排列!
1 2 3 5 8 13 21 34
比如给这八个数在其中选取六个;按升序输出选取的数字如下:
1 2 3 5 8 13
1 2 3 5 8 21
1 2 3 5 8 34
1 2 3 5 13 21
1 2 3 5 13 34
1 2 3 5 21 34
1 2 3 8 13 21
1 2 3 8 13 34
1 2 3 8 21 34
1 2 3 13 21 34
1 2 5 8 13 21
1 2 5 8 13 34
1 2 5 8 21 34
1 2 5 13 21 34
1 2 8 13 21 34
1 3 5 8 13 21
1 3 5 8 13 34
1 3 5 8 21 34
1 3 5 13 21 34
1 3 8 13 21 34
1 5 8 13 21 34
2 3 5 8 13 21
2 3 5 8 13 34
2 3 5 8 21 34
2 3 5 13 21 34
2 3 8 13 21 34
2 5 8 13 21 34
3 5 8 13 21 34

void dfs(int len,int current)  
{  
    int i;  
    if(len>6)   
    {  
        for(i=1;i<6;i++)  
        {  
            printf("%d ",b[i]);  
        }  
        printf("%d\n",b[i]);  
    }  
    else   
    {  
        for(i=current;i<k-(6-len)+1;i++)//这里的循环,确定i的范围并赋值  
        {  
            b[len]=a[i];  
            dfs(len+1,i+1);  
        }  
    }  

谁给我解释一下呗,谢谢各位啦!else里面是在干嘛啊?!
[解决办法]
候选数字为1、2、3、4共四个,选出3个
第一层dfs,len=0,current=0
for循环内的i可以选择的有1、2(如果再往后选就不够了)
    当a[i]=1时,调用dfs选择第二个数字,此时可选数字有2、3
        当a[i]=2时,调用dfs选择第三个数字,此时可选数字有3、4
            当a[i]=3时,调用dfs,此时len达到条件,输出结果,同时递归返回
            当a[i]=4时,调用dfs,此时len达到条件,输出结果,同时递归返回
            递归返回
        当a[i]=3时,调用dfs选择第三个数字,此时可选数字有4
            当a[i]=4时,调用调用dfs,此时len达到条件,输出结果,同时递归返回
        递归返回
    当a[i]=2时,调用dfs选择第二个数字,此时可选数字有3
        当a[i]=3时,调用dfs选择第三个数字,此时可靠数字有4
            当a[i]=4时,调用dfs,此时len达到条件,输出结果,同时递归返回
        递归返回
    递归返回
最初调用返回



然后就是循环内初始值和条件的确定了,自己想吧