弗洛伊德的算法解释

时间:2012-06-07 03:29:19

标签: algorithm floyd-warshall

关于

floyds(int a[][100],int n).

'a'代表什么,代表两个维度的每一个代表什么?

'n'代表什么?

我有一个位置列表,其中列出了这些位置之间的连接,并计算了彼此连接的连接之间的距离。现在我需要在任何给定的两个位置(floyd)之间找到最短路径 - 但需要了解如何将floyds(int a[][100],int n)应用于我的位置数组,城市词典和连接数组。

仅供参考 - 使用目标C - iOS。

3 个答案:

答案 0 :(得分:2)

n是图表中的节点数。

a是图表的distance matrixa[i][j]是从节点i到节点j的边的成本(或距离)。

(如果你需要更多关于这个概念的帮助,也请阅读adjacency matrix的定义。)

答案 1 :(得分:1)

/* Assume a function edgeCost(i,j) which returns the cost of the edge from i to j

2    (infinity if there is none).

3    Also assume that n is the number of vertices and edgeCost(i,i) = 0

4 */

5

6     int path[][];

7     /* A 2-dimensional matrix. At each step in the algorithm, path[i][j] is the shortest path

8        from i to j using intermediate vertices (1..k−1).  Each path[i][j] is initialized to

9        edgeCost(i,j).

10     */

12     procedure FloydWarshall ()

13        for k := 1 to n

14           for i := 1 to n

15              for j := 1 to n

16                 path[i][j] = min ( path[i][j], path[i][k]+path[k][j] );

http://en.wikipedia.org/wiki/Floyd-Warshall

维基非常好~~~

答案 2 :(得分:0)

floyd-warshall(W) // W is the adjacent matrix representation of graph..
 n=W.rows;
 for k=1 to n
    for i=1 to n
       for j=1 to n
            w[i][j]=min(W[i][j],W[i][k]+W[k][j]);
 return W;

这是一个dp-算法。在第k次迭代中,W [i] [j]是i和j之间的最短路径,最短路径的顶点(不包括i和j)来自集合{1 ,2,3 ...,k-1,k}。在min(W [i] [j],W [i] [k] + W [k] [j]),W [i] [j]是在第k-1次迭代时i和j之间的计算最短路径,这里因为中间顶点来自集合{1,2 ... k-1},所以该路径不包括顶点k。在W [i] [k] + W [k] [j]中,我们在路径中包括顶点k。两者之间的最小值是第k次迭代的最短路径。 基本上我们检查是否应该在路径中包含顶点k。