这不是问题的另一个重复,试图理解,为什么Dijkstra不能使用负权重。我知道为什么,但在某些特殊情况下,它会与负重量一起使用,我正试图找到它们。
因此,在某些情况下,Dijkstra可以正确处理负权重的图形,但我找不到示例。有没有人知道图表,那会有效吗?
答案 0 :(得分:3)
事实上,任何仅在start
边缘具有负权重的图形都可以使用。负权重的问题在于它们可以使算法“错过”最低权重的顶点,因为它“较晚”地获得较低的权重。所以
| begin | end | weight |
| s | 1 | -1 |
| s | 2 | -2 |
| 1 | 3 | 1 |
| 2 | 3 | 1 |
| 3 | t | 1 |
应该对Dijkstra没有实际的麻烦。
可以概括为一个更强有力的陈述:任何在Dijkstra评估之前正确计算顶点权重的图形都将被Dijkstra正确处理,保留Dijkstra的时间表现。
答案 1 :(得分:0)
一个简单的例子,Dijkstra在负重量下工作正常就是:
s -(-1)-> t
如果您从源s
在此图上运行Dijkstra算法,它将发现t
作为最近邻居并选择那个,然后我们构建了正确的最短路径树。