将Dijkstra算法应用于具有负权重的无向图

时间:2013-09-04 12:08:18

标签: algorithm graph dijkstra shortest

任何人都可以在无向图中应用Dijkstra算法且负权重高于?即使算法失败了。

Adjancency的列表:

A -> (B, 3), (C, 2), (D, 4)
B -> (A, 3), (C, -2), (F, 6)
C -> (A, 2), (B, -2), (E, 5)
D -> (A, 4), (E, 3), (F, 2)
E -> (C, 5), (D, 3), (F, -2)
F -> (B, 6), (D, 2), (E, -2)

1 个答案:

答案 0 :(得分:1)

使用源节点A对遍历列表进行种子处理,其成本为0.为每个其他节点添加无限成本:

{}, [A=0, B=inf, C=inf, D=inf, E=inf, F=inf]

然后取最低当前成本项(我称之为L)并将其“接受”到最终成本集中(第一次通过案例有L =源节点(A),成本为0)。检查L的每个边缘,计算跟随该边缘的总成本。如果总成本低于遍历列表当前成本,则使用新的较低成本更新遍历列表。

{A=0}, [B=0+3, C=0+2, D=0+4, E=inf, F=inf]

C现在是遍历列表中成本最低的节点,因此接受C的成本为2:

{A=0, C=2}, [B=2-2=0, D=4, E=2+5=7, F=inf]

此时检测问题非常容易,因为我只是在遍历列表中放入一个成本,该成本低于我刚接受的节点(C)的成本。但是,我们继续不受理性或逻辑的影响:

{A=0, C=2, B=0}, [D=4, E=7, F=0+6]
{A=0, C=2, B=0, D=4}, [E=7, F=6]
{A=0, C=2, B=0, D=4, E=7}, [F=7-2=5]
{A=0, C=2, B=0, D=4, E=7, F=5}

由于图中的负成本循环,正确的最终成本数组应为:

{A=-inf, B=-inf, C=-inf, D=-inf, E=-inf, F=-inf}

但我们已经知道,当图形具有负成本循环时,Dijkstra失败了......对吗?