01 BFS 可以用于在只有 2 个权重的图中找到最短路径吗?

Can 01 BFS be used to find shortest path in a graph with only 2 weights?

我已阅读 this 关于 0-1 BFS 的文章,我知道它适用于 0-1 权重。然而,在文章的最后,作者提出了3个问题,其中一个正是我的问题。他在评论中指出,如果权重是任意两个数字 x 和 y,则不起作用。

但是为什么呢?使用的逻辑仍然成立。假设0<=x<=y,对于任意节点u,我们只会添加可以放宽的邻居。此外,所有距离你 x 的邻居都将被添加到双端队列的前面,而那些距离你 x 的邻居将被添加到双端队列的后面。这样,双端队列仍然会根据与当前节点的距离进行排序。

In addition, all the neighbors that are x away from u will be added to the front of the deque and those that are y away will be added at the back of the deque. This way, the deque will still be sorted based on distance from the current node.

当 x > 0 时,双端队列不保证排序。

假设 x=3 和 y=5,我们有这张图,需要找到从 A 到 E 的最短路径:

  A  --3-->  B  --3-->  C

  |                     |
  5                     3
  |                     |
  v                     v

  D   --------3----->   E 

我们从队列中的[A:0]开始(到A的距离为0)。

这个条目被取出来,我们追加D:5和prependB:3,所以我们有[B:3,D:5]

我们取出 B:3 并在前面加上 C:6,所以我们有 [C:6,D:5]。这破坏了排序顺序,因此算法处于错误的立足点。它现在将首先在节点 C 而不是节点 D 上扩展,因此我们找到路径长度为 9 的 E,而路径为 8.

只有当 x=0 时,您才能保证此方法将保持队列排序。