DFS有序数列的全排列
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
谁给我解释一下呗,谢谢各位啦!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达到条件,输出结果,同时递归返回
递归返回
递归返回
最初调用返回
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达到条件,输出结果,同时递归返回
递归返回
递归返回
最初调用返回