|
楼主 |
发表于 2012-12-30 12:33
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
Floyd-Warshall算法
本帖最后由 lee1892 于 2013-1-4 15:01 编辑
Floyd-Warshall算法
其算法的表现可以去看1楼提到的HHAAMM的两个贴子,虽然其实现的代码由于没有使用正确的图的数据结构,而显得很奇怪,但不妨碍我们理解这个算法。
弗洛伊德算法比较了图中任意两个节点间所有可能的路径,其时间复杂度是N(节点数量)的3次方。其好处是可以获得任意两点间的最短距离的长度,但找出路径则比较费劲,需要额外的空间。
实现的伪代码形如:
[code=vb]
构造矩阵 M(1 to N, 1 to N) 且初始值均为 ∞ ' N是节点数量
For i=1 to N
M(i, i)=0
Next
For Each 路径 In 路径集合
M(i, j) = 路径.长度 ' i 为该路径的起点序号,j 为终点序号
Next
For k=1 to N
For i=1 to N
For j=1 to N
If M(i, k) + M(k, j) < M(i, j) Then
M(i, j) = M(i, k) + M(k, j)
End If
Next j, i, k
[/code] |
|