下图有两种写法,一种是在for循环里将vis重新变为false,另一种是在for循环外将vis从小变为false,有时候写题是情况1能ac,有时候是情况2能ac,请问这两种写法的区别是什么?实际效果是什么?谢谢!
这两种写法的区别在于在dfs的回溯过程中,何时重置vis数组中的标记。
在for循环里面重置vis[x],意味着每当dfs回到上一层结点时,就会立即重置这个结点的标记,这样能够确保在dfs继续进行时,结点不会再被重复访问。
而在for循环外面重置vis[x],则意味着每当dfs完成搜索时,才会重置vis数组中的标记,此时,可能会导致在dfs的某些情况下,结点被重复访问。
因此,一般来说,在for循环里面重置vis[x]是更为保险的写法,能够确保dfs的正确性。
同之前問題