小结
深搜和广搜的相同点
深搜和广搜的框架基本相同,都需要解决如下三个问题:
- 如何判断重复?对于树,不需要判重;对于二维矩阵,开一个同样大小的布尔矩阵;对于图,用hashset。判重的这个变量通常命名为
visited
。 - 如何表示状态?即队列里的元素是什么数据类型。简单的有字符串,二维坐标
(x,y)
,复杂的就需要定义一个结构体。如果是求路径本身,还需要加一个邻接表来存储所有路径,key是本节点value是父节点列表。 - 如何扩展状态?一般根据题意来扩展即可,对于树,把所有孩子节点入队列;对于二维矩阵,把上下左右四个位置入队列;对于图,把所有邻居入队列。
深搜和广搜的最显著区别,在于第3步,扩展状态的时候,顺序不一样。代码层面上,仅需要修改一行代码,把队列替换为栈,就可以将广搜变成深搜。