华南理工大学无线电爱好者协会软件小组美妙的算法程序员

Floyd 算法

2017-06-03  本文已影响103人  廖少少

Floyd 算法

简介

核心思路

路径矩阵

状态转移方程

算法描述

  1. 从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。

  2. 对于每一对顶点 u 和 v,看看是否存在一个顶点 w (一般称为中间点)使得从 u 到 w 再到 v 比已知的路径更短。如果是,更新它(专业术语为:松弛)。

  3. 遍历直到结束,这时候存储图的数据结构就得到了多源最短路径。

优缺点分析

Python 代码实现

代码详解

测试

小结

全局最短路径的数据结构

ShortestPath_dict = {
    0: {1: [0, 2, 1], 2: [0, 2], 3: [0, 2, 5, 4, 3], 4: [0, 2, 5, 4], 5: [0, 2, 5]},
    1: {0: [1, 0], 2: [1, 0, 2], 3: [1, 4, 3], 4: [1, 4], 5: [1, 5]}, 2: {0: [2, 1, 0],
    1: [2, 1], 3: [2, 5, 4, 3], 4: [2, 5, 4], 5: [2, 5]},
    3: {0: [], 1: [], 2: [], 4: [], 5: []},
    4: {0: [], 1: [], 2: [], 3: [4, 3], 5: []},
    5: {0: [], 1: [], 2: [], 3: [5, 4, 3], 4: [5, 4]}
    }

利用 Floyd 得到全局最短路径

测试2

代码详解2

源码地址:https://github.com/edisonleolhl/DataStructure-Algorithm/blob/master/Graph/ShortestPath/floyd.py

上一篇 下一篇

猜你喜欢

热点阅读