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);
}
}
}
然后就是循环内初始值和条件的确定了,自己想吧