Python中使用Floyd算法求全源最短路径
Floyd算法是求解全源最短路径的一种经典算法,可以处理带负权边的图,时间复杂度为O(n^3),其中n为顶点数。下面是Python中使用Floyd算法求全源最短路径的示例代码:
INF = float('inf') # 无穷大 def floyd(graph): n = len(graph) dist = [[INF] * n for _ in range(n)] # 初始化距离矩阵 for i in range(n): dist[i][i] = 0 # 自身到自身距离为0 for j in range(n): if graph[i][j] != 0: dist[i][j] = graph[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 # 示例 graph = [[0, 3, 8, INF, -4], [INF, 0, INF, 1, 7], [INF, 4, 0, INF, INF], [2, INF, -5, 0, INF], [INF, INF, INF, 6, 0]] dist = floyd(graph) # 打印最短距离矩阵 for i in range(len(dist)): for j in range(len(dist[i])): if dist[i][j] == INF: print("INF", end="\t") else: print(dist[i][j], end="\t") print()
在以上代码中,首先定义了一个表示无穷大的常量INF,然后定义了函数floyd来计算全源最短路径。该算法使用了一个n×n的距离矩阵dist来存储任意两个节点之间的距离,首先对距离矩阵进行初始化,将相邻节点之间的距离存入矩阵中。接着使用三重循环对距离矩阵进行更新,使得任意两个节点之间的距离表示最短路径。最后返回更新后的距离矩阵。
以上代码可以用于处理任意大小的带权有向图,不论是采用邻接矩阵或邻接表来实现的。
相关文章