我有一个有向加权图G = <V, E>
。我需要找到s
中t
和O((V + E)*logV)
之间的最短路径。如果我有一个经典的公制度量路径,这将是一个非常简单的任务。但事实并非如此。
Weight of path = two heaviest edges in this path
。
因此,经典Dijkstra's algorithm with modified binary heap
不起作用。我想,我必须修改这个算法。我正在尝试这样做,但我没有成功。
Example.
3
和5
之间的路径权重= 4 + 2 = 6
3
和7
= 4 + 4 = 8
答案 0 :(得分:2)
根据David Eisenstat的反例编辑我的答案。
您在问题中提供的示例并不是Dijkstra不起作用的好例子。
我相信你可以通过修改Dijkstra来做到这一点。关键是要跟踪每个顶点的多个备选方案。您不仅需要存储构成最短路径的权重,还必须存储max&lt; shortest.max和min> shortest.min。
Dijkstra是贪婪的,所以你需要弄清楚的是:一旦确定了最短路径,就可能找到另一条路径变得更短。因为你会发现越来越长的路径,这是不可能的。