如果给定图形节点之间的最短距离矩阵,如何确定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之间的边缘。
有人可以指导如何做到这一点吗?提前谢谢。
答案 0 :(得分:3)
注意:除非通过另一个节点在这两个节点之间存在较短的路径,否则原始网络中的实际链路都存在于此距离矩阵中。如果路径较短,则可以忽略此较长距离链路以解决此问题。
所以......
我会从最短的距离开始。这必须代表两个节点之间的实际路径。只用这两个节点和它们之间的一个链接创建一个图形。
现在在节点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