双端队列广搜
双端队列广搜
时间复杂度;
- 每次从队列中取出队头为 $O(1)$
- 整体时间复杂度为线性的,即 $O(n + m)$
适用场景
- 边权仅为0或1的图中
算法模板
(整体思路类似堆优化 $dijkstra$ 算法)
1 | void bfs() |
算法证明:
- 类似堆优化 $dijkstra$ 算法,因为边权只有0和1,可以将0插入队头,1插入队尾,可以保证单调性的同时,将从优先队列中取出最小值的 $O(logm)$ 的步骤,优化为只取出队头的 $O(1)$ 操作,从而将时间复杂度降低为线性
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Moench 的算法宝库!