关于Dijkstra的算法

时间:2013-10-11 11:41:47

标签: algorithm dijkstra

这是我的问题。 如果某些边权重为负,则可以通过向每个边权重添加常数C来获得s中的最短路径,大到足以使所有边权重为非负,并运行Dijkstra算法。

这是真是假,为什么?

2 个答案:

答案 0 :(得分:1)

错误:如果某些边权重为负,则可能没有最短路径。

可以循环到负成本周期,以便根据需要降低成本。

据说,如果你禁止使用两次相同的点,我认为它会成为现实。

即使您禁止使用两次相同的点,它仍然无法按照MrSmith42的说明工作:

  

您可能有两条路径,其中一条费用为0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 0,另一条路径为10 +( - 4)= 6。如果将所有权重增加4,则成本将为4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 = 40,其他14 + 0 = 10。这样,通过改变重量,更便宜的路径变得更加昂贵。

答案 1 :(得分:0)

您正在更改问题,以有效地添加C *路径长度的惩罚。

这意味着您可能会根据C的值获得不同的答案。

C越大,您的算法越偏向于选择从源到目的地的路径,边数最少。

话虽如此,如果您的图表是这样的,从源到目的地的每条路径总是具有相同的长度,那么这种方法将起作用。

这将起作用的图表示例

enter image description here