一种是在for循环里面让vis[x]重新变为0,另一种是在for循环外面让vis[x]重新变为0,请问这两种写法的实际效果是什么,谢谢。
这两种写法的区别在于在dfs的回溯过程中,何时重置vis数组中的标记。
在for循环里面重置vis[x],意味着每当dfs回到上一层结点时,就会立即重置这个结点的标记,这样能够确保在dfs继续进行时,结点不会再被重复访问。
而在for循环外面重置vis[x],则意味着每当dfs完成搜索时,才会重置vis数组中的标记,此时,可能会导致在dfs的某些情况下,结点被重复访问。
因此,一般来说,在for循环里面重置vis[x]是更为保险的写法,能够确保dfs的正确性。
不知道你这个问题是否已经解决, 如果还没有解决的话: