为什么深度优先搜索是错误的?
查看原帖
为什么深度优先搜索是错误的?
963669
w3i1ong楼主2023/5/20 11:15

大部分题解都是用了深度优先搜索来解题。但是有大佬给出了一组hack数据,导致很多人都过不了。这里我试图分析一下,深搜为什么在某些情况下是过不了的。

基本想法

先说结论:深度优先搜索的路径本质上就是一条一笔画的路径。

简单回顾一下深搜的过程:

  1. 对于当前节点vv,找到与vv相邻的、且未被访问过的节点uu;
  2. 把uu标记为visited,然后对uu进行深度优先搜索。

简单思考一下,可以发现深度优先搜索访问的节点组成了一条路径,它满足路径上的每个点均只出现一次(其实就是一个一笔画的路径)。因此,使用dfs只能遍历到能一笔画的连通分量。如果某个答案不能从左上角一笔画出来,那就不太可能用dfs求解了。下面给个很简单的不能一笔画的例子。

10 1 
1 12 

可以发现,从左上角做深度优先搜索只能搜索到(0,0)->(0,1)和(0,0)->(1,0)这两条路径,根本不可能搜索到结果(0,0),(0,1),(1,0)(因为不能一笔画出来)。 类似的例子还有很多,如下:

31 6 6
1 1 6
1 6 6
1 1 6
2023/5/20 11:15
加载中...