Floyd-Warshall算法最短路径

时间:2012-06-11 08:14:43

标签: c shortest-path floyd-warshall

我实施了Floyd-Warshall算法。根据他们的矩阵,我可以得到正确的结果,关于两个地方之间的最短路径和他们的距离。我的问题是如何打印从i到j的最短距离。我做了一些研究,我发现了一个类似的算法。任何人都可以解释我应该怎么做,或者它是如何工作的,或者说出任何其他建议?

PrintShortestPath(P,i,j){
    if(i==j) print i
    else if (P[i][j]==NULL)
        print "No path from i to j"
    else{
        PrintShortestPath(P,i,P[i][j])
        print j
    }
}

2 个答案:

答案 0 :(得分:1)

Floyd的算法考虑了两个节点之间的所有路径,并保持最便宜的发现。 你的代码以递归方式进行。 这是另一个实现,在C中有一个很好的解释: http://www.fearme.com/misc/alg/node88.html

你也可以考虑Dijkstra的算法,它可能对稀疏图表有更好的表现。

- L

答案 1 :(得分:0)

您发布的算法中的矩阵P是前趋矩阵。 它列出了每条路径i - > j前身。

这必须与距离矩阵一起计算:

  • P [i,j]初始化为NULL forall i,j
  • 如果您发现从节点k传递的路径较短(使用P [k,j]),则在FW更新P [i,j]的最内层循环中。

如果您发布距离的解决方案,我可以更精确。