美文网首页Aha! Algorithms
Aha! Algorithms - Floyd-Warshall

Aha! Algorithms - Floyd-Warshall

作者: su3 | 来源:发表于2017-03-19 10:37 被阅读0次

《啊哈!算法》第 6 章第 1 节,Floyd-Warshall 算法求最短路径的 Swift 实现。

问题

4 个城市之间有若干条单向公路,求任意两个城市之间的最短路程。也称为“多源最短路径问题”。

解决

依次计算通过城市1~4中转时的路程,与已知的最短路程比较。

/*: 二维矩阵表示地点之间的关系
 
 * 纵向表示出发点 1~n
 * 横向表示到达点 1~n
 * 坐标系 e[0][1] 表示从 1 到 2 的距离为 2,索引值先读 纵向 后读 横向
 * inf 表示无限大,表示两个点之间没有直接的边(路线)到达
 
*/
 
var inf = 99999999
var e = [[0,     2,  6,   4],
         [inf,   0,  3, inf],
         [7,   inf,  0,   1],
         [5,   inf, 12,   0]]
let n = e.count

//从 1~n 一一计算以该路线作为中转站时的最短距离
//直接到达的距离是 e[i][j],通过地点1到达的距离是 e[i][0] + e[0][j]
//矩阵纵向和横向两次遍历,加上有n条路线就要进行n次遍历,总共 n * n * n 次循环
for k in 0..<n {
    for i in 0..<n {
        for j in 0..<n {
            if e[i][j] > e[i][k] + e[k][j] {
                e[i][j] = e[i][k] + e[k][j]
            }
        }
    }
}

//输出结果
for i in 0..<n {
    for j in 0..<n {
        print("\(e[i][j])", separator: "", terminator: "  ")
    }
    print("\n")
}

此算法由 Robert W. Floyd 于 1962 年发表。同年 Stephan Warshall 也独立发表了这个算法。 Robert W. Floyd 在 1978 年获得图灵奖。

代码在 GitHub

相关文章

  • Aha! Algorithms - Floyd-Warshall

    《啊哈!算法》第 6 章第 1 节,Floyd-Warshall 算法求最短路径的 Swift 实现。 问题 4 ...

  • Aha! Algorithms

    1. 涉及的数据结构 栈、队列、链表、树、并查集、堆、图 2. 涉及的算法 排序、枚举、深度和广度优先搜索、图的遍...

  • Aha! Algorithms - Quicksort

    《啊哈!算法》第 1 章第 3 节,快速排序的 Swift 实现 问题 为给定数字序列排序 解决 以左侧第一个位置...

  • Aha! Algorithms - Queue

    《啊哈!算法》第 2 章第 1 节,队列的 Swift 实现 问题 给一个数字序列,解密方法是:删除第 1 个,将...

  • Aha! Algorithms - Dijkstra

    《啊哈!算法》第 6 章第 2 节,Dijkstra 算法求最短路径的 Swift 实现。 问题 已经若干顶点和路...

  • Aha! Algorithms - Floodfill

    《啊哈!算法》第 4 章第 5 节,漫水填充法的 Swift 实现。 问题 给一个群岛地图中不同的岛屿填充不同的颜...

  • Aha! Algorithms - Bomberman

    《啊哈!算法》第 3 章第 2 节,bomb 人的 Swift 实现。 问题 在哪里放置 bomb 才可以消灭最多...

  • Aha! Algorithms - Stack

    《啊哈!算法》第 2 章第 2 节,栈的 Swift 实现。 问题 判断字符串是否回文 解决 将字符串前半部分入栈...

  • Aha! Algorithms - Heap

    《啊哈!算法》第 7 章第 3 节,创建最小堆的 Swift 实现。 问题 把一个数组转换为最小堆,并从小到大输出...

  • Aha! Algorithms - Bucket Sort

    《啊哈!算法》第 1 章第 1 节,桶排序的 Swift 实现 问题 班上 5 个同学的考试成绩分别为:5 分,3...

网友评论

    本文标题:Aha! Algorithms - Floyd-Warshall

    本文链接:https://www.haomeiwen.com/subject/vxjmnttx.html