广度优先搜索

· · 个人记录

一、适用情景

由于是对搜索数的层序遍历,他适合求解层数较浅的搜索。所以他要维护一种解的单调性而不是深搜的连续性

洪泛法

也就是这样:

走地图

也就是在地图上行走的最优问题。

但一般不改变图的样子,这样便只需要存储当前位置答案及相关信息,而不需要存储整个地图。对于地图确实会变化的,可以适用状态压缩,将地图压进队列中的每个状态。

且与状压DP相比,他更适合解决复杂的地图

这类广搜的精髓在于其状态设计与处理,有以下一个注意点:

二、解集排列形式

1.队列

仅仅适用于步数及没走一步答案更新(边权)都相同的情景。

2.双端队列

适用于边权仅为0或1的情况。

3.优先队列

适用于边权全为非负的情况。

4.备注

对于边权有正有负,飘忽不定的情况,广搜的单调性难以维护,此时只能把地图全部遍历一遍,用深搜广搜都一样了。

三、优化

双向搜索

于深搜一样,起点与终点同时进行,每次各扩展一层,当一个状态同时被搜索到,说明相遇了,合并答案就行。

启发式广搜

让优先队列以估价值+当前值进行排序,与其他启发式搜索一样,其估价值必须小于等于实际值。

注意,因为估价函数的影响,最终的答案为第一次出队列而非第一次入队列。

相比于迭代加深启发式搜索的预知不可能,启发式广搜在倾向于选择更可能