大部分题解都是用了深度优先搜索来解题。但是有大佬给出了一组hack数据,导致很多人都过不了。这里我试图分析一下,深搜为什么在某些情况下是过不了的。
基本想法
先说结论:深度优先搜索的路径本质上就是一条一笔画的路径。
简单回顾一下深搜的过程:
- 对于当前节点v,找到与v相邻的、且未被访问过的节点u;
- 把u标记为visited,然后对u进行深度优先搜索。
简单思考一下,可以发现深度优先搜索访问的节点组成了一条路径,它满足路径上的每个点均只出现一次(其实就是一个一笔画的路径)。因此,使用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