这是我的问题。 如果某些边权重为负,则可以通过向每个边权重添加常数C来获得s中的最短路径,大到足以使所有边权重为非负,并运行Dijkstra算法。
这是真是假,为什么?
答案 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越大,您的算法越偏向于选择从源到目的地的路径,边数最少。
话虽如此,如果您的图表是这样的,从源到目的地的每条路径总是具有相同的长度,那么这种方法将起作用。