Dijkstra 算法将正确运行的负权重图示例

Example of graph with negative weights that Dijkstra's Algorithm will work correctly

这不是另一个重复的问题,试图理解为什么 Dijkstra 不能使用负权重。我知道为什么,但在某些特殊情况下,它会使用负权重,我正在尝试找到它们。

因此,在某些情况下,Dijkstra 可以正确处理具有负权重的图,但我找不到示例。有谁知道图表,那行得通吗?

Dijkstra 在负权重下工作正常的一个简单例子就是:

s -(-1)-> t

如果你 运行 Dijkstra 算法在这个来自源 s 的图上,它会发现 t 作为最近的邻居并选择那个,然后我们构造正确的最短路径树.

事实上,任何仅在起源于 start 的边上具有负权重的图都可以工作。负权重的问题在于它们可能导致算法 "miss" 一个权重最低的顶点,因为它获得了较低的权重 "later"。所以

| begin | end | weight |
|   s   |  1  |   -1   |
|   s   |  2  |   -2   |
|   1   |  3  |    1   |
|   2   |  3  |    1   |
|   3   |  t  |    1   |

应该不会给 Dijkstra 带来实际麻烦。

可以将其概括为更强的陈述:任何在 Dijkstra 评估之前正确计算顶点权重的图都将由 Dijkstra 正确处理,同时保留 Dijkstra 的时间性能。