Python中Floyd算法的实现方法
Floyd算法是一种动态规划算法,用于求解任意两点之间的最短路径。该算法的时间复杂度为O(n^3),适用于边权值为正负整数的有向图或无向图。
以下是Python中Floyd算法的实现方法:
-
创建一个二维数组dist,用于存储任意两点之间的最短距离。
-
初始化dist数组,如果i和j之间有边,则dist[i][j]为边的权值,否则为无穷大。
-
利用三重循环,枚举中间结点k,并更新dist数组,通过比较dist[i][j]和dist[i][k]+dist[k][j]的大小关系,选择较小的值更新dist[i][j]。
-
返回更新后的dist数组。
下面是Floyd算法的Python代码演示:
INF = float('inf') # 无穷大 # 示例图的邻接矩阵表示 mat = [ [0, 1, 3, INF, INF], [1, 0, 1, 4, 2], [3, 1, 0, 6, INF], [INF, 4, 6, 0, 3], [INF, 2, INF, 3, 0] ] def floyd(mat): n = len(mat) dist = [[INF]*n for _ in range(n)] for i in range(n): for j in range(n): if mat[i][j] != INF: dist[i][j] = mat[i][j] for k in range(n): for i in range(n): for j in range(n): if dist[i][j] > dist[i][k] + dist[k][j]: dist[i][j] = dist[i][k] + dist[k][j] return dist dist = floyd(mat) for row in dist: print(row)
输出结果为:
[0, 1, 2, 6, 3] [1, 0, 1, 4, 2] [2, 1, 0, 5, 3] [6, 4, 5, 0, 3] [3, 2, 3, 3, 0]
其中,dist表示任意两点之间的最短距离,即dist[i][j]表示结点i到结点j的最短距离。在示例图中,结点1到结点5的最短距离为3,结点4到结点2的最短距离为4。
相关文章