如何找到至少通过一个强制节点的两个节点之间的最短距离?

时间:2017-09-29 06:09:00

标签: graph distance shortest-path dijkstra

我有一个双向加权图,大约有5000个节点 我有一个“重要”节点列表(100左右)。给定起始节点和结束节点,如何找到通过至少一个“重要”节点的这两个节点之间的最短距离。请注意,没有负边缘。我实现了dijkstra的算法来找到给定两个节点的最短距离。我知道如何解决这个问题的唯一方法是通过重要节点列表,找到从开始的距离 - > importantNode#1 - >结束所有重要节点然后采取最小值。有没有更快的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的方法绝对正确,您需要的是应用Dijkstra次数较少。 通过两次应用Dijkstra可以很容易地解决这个问题。

  • start 作为来源应用Dijkstra。将距离存储在数组 fromS

  • 再次申请Dijkstra。这次以结束作为来源。将距离存储在数组到E 中。 由于图形是无向的,从 end 节点到每个其他节点的最短距离与从每个其他节点到 end 节点的最短距离相同。 (这就是诀窍)。

  • 找到所需的最短距离。

    For node in importantNodes :
      ans = min ( fromS [node] + toE[node] , ans)
    return   ans