这是完整代码:
#include<stdio.h>
int book[20],a[20],n;
void dfs(int step)
{
int i=0;
if(step==n+1)
{
for(i=1;i<=n;i++)
{
printf("%d",a[i]);
}
printf("\n");
return ;
}
for(i=1;i<=n;i++)
{
if(book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;
}
}
}
int main()
{
int x;
scanf("%d",&n);
dfs(1);
getchar();getchar();
return 0;
}
这是注释过后的代码://解释一下,下面的代码printf括号中的汉字可以不用去理会,目的就是输出运行结果时可以方便的看出来这个代码运行到哪一步//
#include<stdio.h>
int book[20],a[20],n;
void dfs(int step)
{
printf("第一步:step=%d\n",step);
int i=0;
if(step==n+1)
{
for(i=1;i<=n;i++)
{
printf("%d",a[i]);
}
printf("\n");
return ;
}
for(i=1;i<=n;i++)
{
if(book[i]==0)
{
a[step]=i;
book[i]=1;
printf("请step=%d\na[step]=%d\ni=%d\nbook[i]=%d结束\n",step,a[step],i,book[i]);
dfs(step+1);
book[i]=0;
printf("\t:");
}
printf("录step==%d**i==%d**a[step]==%d完\n",step,i,a[step]);
}
}
int main()
{
int x;
scanf("%d",&n);
dfs(1);
getchar();getchar();
return 0;
}
这是注释后的代码的运行结果:
关于这个代码,说一下我的理解,我最开始不明白这个代码的地方是运行后的调用,就比如说当step等于n+1时,它返回到上一个dfs处;还有就是i的值,当i等于n+1的时候,此时就是for循环退出的时候,void函数代码执行完了,然后就会返回到上一个调用dfs的地方。和step==n+1的作用一样,都是返回到上一个调用dfs函数的地方,只要理清楚每次调用dfs函数时step,i,book[i],a[step]它们的值就行了,自己完整的体会一遍,就能懂了、