在计算机科学和图论中,Floyd算法(也称为Floyd-Warshall算法)是一种用于寻找图中所有顶点对之间最短路径的经典算法。它适用于带权有向图或无向图,甚至可以处理负权边(但不能有负权环)。本教程将带你从零开始,用Python语言实现Floyd算法,即使你是编程小白也能轻松理解。
Floyd算法的核心思想是动态规划。它通过逐步引入中间节点,不断更新任意两点之间的最短距离。算法的时间复杂度为 O(n³),其中 n 是图中顶点的数量。

下面是一个完整的、易于理解的Python实现Floyd算法的代码示例:
def floyd_warshall(graph): """ 使用Floyd-Warshall算法计算所有顶点对之间的最短路径 :param graph: 邻接矩阵,graph[i][j] 表示从i到j的边权重 :return: 最短路径距离矩阵 """ # 获取顶点数量 n = len(graph) # 初始化距离矩阵(复制原图) dist = [[graph[i][j] for j in range(n)] for i in range(n)] # Floyd核心算法 for k in range(n): # 中间节点 for i in range(n): # 起点 for j in range(n): # 终点 # 如果经过k能缩短i到j的距离,则更新 if dist[i][k] + dist[k][j] < dist[i][j]: dist[i][j] = dist[i][k] + dist[k][j] return dist# 示例:定义一个带权图(邻接矩阵)# 使用 float('inf') 表示无直接连接INF = float('inf')graph = [ [0, 3, INF, 7], [8, 0, 2, INF], [5, INF, 0, 1], [2, INF, INF, 0]]# 调用Floyd算法result = floyd_warshall(graph)# 打印结果print("所有顶点对之间的最短距离:")for row in result: print(["{:>5}".format(str(x) if x != INF else "INF") for x in row])Floyd算法广泛应用于网络路由、交通规划、社交网络分析等领域。虽然它的复杂度较高,但由于其简洁性和能一次性求出所有点对最短路径的特点,在小规模图或需要全源最短路径时非常实用。
通过本教程,你已经掌握了如何用Python语言实现Floyd算法来解决最短路径算法问题。Floyd算法作为经典的图论算法之一,不仅逻辑清晰,而且代码简洁。希望你能动手尝试,加深理解!
关键词回顾:Floyd算法、Python实现Floyd算法、最短路径算法、图论算法
本文由主机测评网于2025-12-20发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251210449.html