求单源最短路径,边权有的为0,有的为1。 一般的BFS,每个边的边权都为1,保证广度优先搜索正确性的基础在于:对于源点 s 以及任意两个节点 u 和 v,如果dist[u]< dist[v]。那么节点 u 一定会比节点 v 先被取出队列。在常规的广度优先搜索中,我们使用队列作为维护节点的数据结构,就保证了从队列中取出的节点,它们与源点之间的距离是单调递增的。然而如果边权可能为 0,就会出现先将边权值为1的点加入队列再将边权值为0的点加入队列,这样在取出队列时,到源点之间的距离便不是单调递增的了,违反了广度优先搜索正确性的基础。于是我们用双向队列来作为维护节点的数据结构,当权值为0时,将其加入队首,当权值为1时,将其加入队尾。这样以来,我们保证了任意时刻从队首到队尾的所有节点,它们与源点之间的距离是单调递增的,即从队列中取出的节点与源点之间的距离同样是单调递增的。 例题:https://leetcode.cn/problems/minimum-obstacle-removal-to-reach-corner/ 代码: