确定顶点是否在任何最短路径中的算法

时间:2017-12-09 03:03:06

标签: algorithm graph shortest-path dijkstra

给定无向图G = {E,V},具有正边缘成本。对于所有节点组合,有没有办法确定某个节点v是否不在其不是端点的任何最短路径上?

我的想法是,它可以通过在除v之外的每个节点上执行Dijkstra算法的修改形式来完成,其中它将标记v是否在解决方案中。但我不知道如何修改算法来做到这一点。

1 个答案:

答案 0 :(得分:1)

假设v是顶点,而ab是相对的起点和终点。

  1. 找到从ab的最短路径长度。
  2. 找到从avvb的最短路径长度。
  3. 如果第2步的总和等于第1步的值,则v位于从ab的潜在最短路径上。
  4. PS :算法时间复杂度与查找最短路径相同。

    更新:Dijkstra从一个节点开始,并将该距离的最小距离传播到其他节点。这样做直到它到达所有节点(while Q is not empty)。如果您对一个特定节点(终点)感兴趣,您可以在Dijkstra中执行此过程,直到达到该点(即假设t是目标点,您执行(最小)距离传播,直到从u提取Q。另一方面,在这一行u ← vertex in Q with min dist[u]u equals t你可以return dist[u])。请查看this以获取有关Dijkstra和更好的图形插图的更详细说明。