Floyed-Warshall算法

简单的矩阵乘法。

对于每个状态d[i][j][k] 表示i*j的矩阵里面选出1...K共K个元素。满足状态转移方程:

dp[i][j][k]=min{dp[i][j][k-1],dp[i][k][k]+dp[k][j][k]},特殊的,有:当k=0时,dp[i][j][0]=w(i,j)。此乃递归解法。

附件:FLOYED算法

过一个图的权值矩阵求出它的每两点间的最短路径矩阵。

从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又用同样地公式由D(1)构造出D(2);……;最后又用同样 的公式由D(n-1)构造出矩阵D(n)。矩阵D(n)的i行j列元素便是i号顶点到j号顶点的最短路径长度,称D(n)为图的距离矩阵,同时还可引入一 个后继节点矩阵path来记录两点间的最短路径。
     采用的是松弛技术,对在i和j之间的所有其他点进行一次松弛。所以时间复杂度为O(n^3)。
a) 初始化:D[u,v]=A[u,v]
b) For k:=1 to n
For i:=1 to n
For j:=1 to n
If D[i,j]>D[i,k]+D[k,j] Then
D[i,j]:=D[i,k]+D[k,j];
这样更新后的D就是最短路径了!
posted @ 2008-10-31 11:20  SЁv⑦ēЙ  阅读(471)  评论(0)    收藏  举报