我可以在图表中使用Dijkstra的最短路径算法吗?

时间:2014-03-24 18:05:54

标签: algorithm graph graph-algorithm shortest-path greedy

我有一个有向图,除了离开源(S)的边之外,所有非负边。从源的任何其他顶点都没有边。为了找到图中从源(S)到顶点(T)的最短距离,我可以使用Dijkstra的最短路径算法,即使离开源的边是负的吗?

4 个答案:

答案 0 :(得分:6)

假设只有源 - adjecent边可以具有负权重,并且没有从任何源 - adjecent节点返回源的路径(如注释中所述),您只需在所有边上添加常量C,来源使他们都非负面。然后从最终结果中减去 C

更一般地说,在应用Johnson's reweighting algorithm之后,Dijkstra可用于解决任何具有负边缘权重(但没有负周期)的图形中的最短路径(基本上是Bellman-Ford,但需要是只执行一次)。

答案 1 :(得分:2)

是的,你可以在那种有向图上使用Dijkstra。

如果您使用已完成的Alijoritm用于Dijsktra并且它不能使用负值,则最好找到最低的负边缘并将该数字添加到所有起始边缘,因此根本没有负数。你在完成后减去那个数字。

如果您自己编写代码(这非常简单,我向您推荐),您几乎不会改变任何东西,只需从最低值开始(像Dijkstra一样)并允许它,最低值可能是负值。它适用于你的情况。

答案 2 :(得分:1)

你通常不能将Dijkstra算法用于带有负链接的(定向)图的原因是Dijkstra的算法是贪婪的。它假设一旦你选择一个距离最小的顶点,就不可能在以后中通过较小的路径到达

在你的特定图表中,在第一步之后,你遍历所有可能的负边缘,而Dijkstra的假设从现在开始实际上持有。无论直接连接到start的那些顶点现在都具有负值这一事实,一旦您确定哪个顶点具有最小距离,就不能再以较小的距离再次到达(因为从此点开始遍历的所有边将具有正值距离)。

答案 3 :(得分:1)

如果你考虑一下dijkstra算法在算法工作边缘的条件,那么它只是在初始化后它们永远不会减少。

因此,如果第一步是否定的,实际上并不重要,因为从那几点起,功能不断增加,因此找到正确的输出(前提是没有办法回到起点正方形)。