我想知道我是否可以这样修改Dijkstra'a Alghorithm: 假设两个顶点之间有两条路径,长度如下:
5, 8, 6, 9 // sum=28
2, 4, 8, 25 //sum=39
第一条路径较短,但在忽略两条路线中最长边后,我得到以下总和:19和14,所以我选择第二条路径。
也许有不同的解决方法,不使用Dijkstra?
答案 0 :(得分:1)
我不确定这个想法是否有效,但首先在我看来它似乎可以。
对于每个受访节点,在距离D(n)
旁边,存储路径上最长边的长度,例如L(v)
。对于访问过的所有邻居min D(n) + L(n) - max(L(n), weight(v,n))
,未访问的邻居节点的距离为n
。如果L(v)
是max(L(n), weight(v,n))
路径上的最后一个节点,则下一个访问节点的n
为v
。如果有更多路径指向v
(更多n's
)且长度相同,则选择最大L(v)
的路径。