这一段让我迷了两次,为什么回溯的时候,恢复了最后一位,往上递归一层之后,把最后一位填在它前一位,但是原本的前一位没有恢复,最后一位要怎么办?其实这还是递归没明白
也就是这一步是如何实现的
for(int j=1;j<=n;j++)
{
if(!date[j])
{
tate[u]=j;
date[j]=1;
dfs(u+1);
date[j]=0;
}
}
当到要回溯时,
u从3->2(n=3时),data[3]=0
这时j=3,无法再进入for循环,要再次回溯到上一层
u从2->1,data[2]=0,
这时j=2,可以进入for循环,但是j++,j从3开始判断,所以这时跳过了j=2,到下次才开始判断j=2的情况
实在还是不能理解的话,就和我一样debug一下吧,简单暴力