在有向加权图中找到两个节点之间的最短路径

时间:2014-12-20 15:38:39

标签: algorithm graph computer-science graph-algorithm shortest-path

我有一个有向加权图G = <V, E>。我需要找到stO((V + E)*logV)之间的最短路径。如果我有一个经典的公制度量路径,这将是一个非常简单的任务。但事实并非如此。

Weight of path = two heaviest edges in this path

因此,经典Dijkstra's algorithm with modified binary heap不起作用。我想,我必须修改这个算法。我正在尝试这样做,但我没有成功。

Example.

enter image description here

35之间的路径权重= 4 + 2 = 6

37 = 4 + 4 = 8

之间的路径权重

1 个答案:

答案 0 :(得分:2)

根据David Eisenstat的反例编辑我的答案。

您在问题中提供的示例并不是Dijkstra不起作用的好例子。

我相信你可以通过修改Dijkstra来做到这一点。关键是要跟踪每个顶点的多个备选方案。您不仅需要存储构成最短路径的权重,还必须存储max&lt; shortest.max和min> shortest.min。

Dijkstra是贪婪的,所以你需要弄清楚的是:一旦确定了最短路径,就可能找到另一条路径变得更短。因为你会发现越来越长的路径,这是不可能的。