• 双端队列bfs:
    • 我们常用的bfs满足两段性与单调性,每个状态在第一次被访问时,计算出的步数即为所求。
    • 然而,以上的结论是在满足图的边权为1的前提下得到的,如果边权不都为1呢?
    • 我们考虑边权一些为1一些为0的情况:
      • 用双端队列,边权为1的正常入队尾,边权为0的入队首。
      • ch2601
  • 优先队列bfs:
    • 为了更具普适性,即每次扩展的代价各有不同时,我们有两个解决方案:
      1. 仍然采用一般的广搜,复杂度O(n^2),例如SPFA。
      2. 改用优先队列进行广搜,复杂度O(NlogN),例如堆优化的Dijkstra算法。
  • 双向bfs:
    • 两边轮流进行,每次各拓展一整层。
    • 当两边各有一个状态在记录数组中发生重复时,就说明这两个搜索过程相遇了,可以合并并得出起点到终点的最少步数。

发表评论

邮箱地址不会被公开。 必填项已用*标注