寻找可能忽略1(最长)边缘的最短路径

时间:2013-01-04 15:15:03

标签: graph path dijkstra

我想知道我是否可以这样修改Dijkstra'a Alghorithm: 假设两个顶点之间有两条路径,长度如下:

5, 8, 6, 9  // sum=28
2, 4, 8, 25 //sum=39

第一条路径较短,但在忽略两条路线中最长边后,我得到以下总和:19和14,所以我选择第二条路径。

也许有不同的解决方法,不使用Dijkstra?

1 个答案:

答案 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))路径上的最后一个节点,则下一个访问节点的nv。如果有更多路径指向v(更多n's)且长度相同,则选择最大L(v)的路径。