如果节点之间的距离矩阵最短,如何确定2个节点之间的路径?

时间:2015-11-02 00:11:24

标签: algorithm graph graph-algorithm graph-traversal

如果给定图形节点之间的最短距离矩阵,如何确定2个节点之间的最短路径?

例如,我有4个节点和最短距离矩阵(m)。

0 4 5 8
4 0 6 3
5 6 0 2
8 3 2 0

m(i,j)是节点i和节点j之间的路径的距离,它不必是节点i和节点j之间的边缘。

有人可以指导如何做到这一点吗?提前谢谢。

3 个答案:

答案 0 :(得分:3)

注意:除非通过另一个节点在这两个节点之间存在较短的路径,否则原始网络中的实际链路都存在于此距离矩阵中。如果路径较短,则可以忽略此较长距离链路以解决此问题。

所以......

我会从最短的距离开始。这必须代表两个节点之间的实际路径。只用这两个节点和它们之间的一个链接创建一个图形。

现在在节点X和Y之间取下一个最短距离。

  • X和Y之间的现有网络中是否存在距离相等的路径?如果是这样的话,就不需要链接(它可能代表一个真正的链接,或者它可能不是,不管你不需要它)。
  • 是否< X和Y之间现有网络中的最短路径,很好地将它添加到网络中,这里必须有一个你尚未见过的真实链接。
  • 是>> X和Y之间现有网络中的最短路径 - 错误 - 它不是这两个节点之间的最短距离,因此原始距离矩阵是错误的。

继续前行,直到你使用了所有的距离。

您现在有一个可能的网络,它是原始网络的子网络,它包含计算任何节点对之间的每条最短路径所需的链接。现在,您可以使用标准的最短路径算法计算最短路径。

答案 1 :(得分:0)

由于边缘权重(在这种情况下是距离)是正的,因此您可以使用Dijkstra算法:https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

C中的实现:http://www.ccodechamp.com/c-program-to-find-shortest-path-using-dijkstras-algorithm/

答案 2 :(得分:0)

您可以构建最小距离矩阵(包含所有最小距离的另一个矩阵,直到单元格[i,j])然后返回最后一个单元格。构建它只需要O(n)。 n是矩阵中项目的数量。

这是构建最小距离矩阵的C#实现。

def importFile(file):
with open(file) as f:
    content = f.readlines()
    print content
    for line in content:
        tempList = line.split(',')
    print tempList