关于dfs的使用问题,请问这两种写法的区别是什么。

一种是在for循环里面让vis[x]重新变为0,另一种是在for循环外面让vis[x]重新变为0,请问这两种写法的实际效果是什么,谢谢。

img

img

这两种写法的区别在于在dfs的回溯过程中,何时重置vis数组中的标记。

在for循环里面重置vis[x],意味着每当dfs回到上一层结点时,就会立即重置这个结点的标记,这样能够确保在dfs继续进行时,结点不会再被重复访问。

而在for循环外面重置vis[x],则意味着每当dfs完成搜索时,才会重置vis数组中的标记,此时,可能会导致在dfs的某些情况下,结点被重复访问。

因此,一般来说,在for循环里面重置vis[x]是更为保险的写法,能够确保dfs的正确性。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^