Floyd 算法是一种用于计算图中所有顶点对之间最短路径的算法。在 LeetCode 中,有许多问题涉及到图的最短路径,Floyd 算法在这些问题的解决中扮演着重要的角色。

Floyd 算法原理

Floyd 算法的基本思想是:通过逐渐考虑中间顶点,来逐步寻找所有顶点对之间的最短路径。算法的时间复杂度为 O(n^3),其中 n 是图中的顶点数。

Python 实现示例

以下是一个使用 Python 实现的 Floyd 算法示例:

def floyd_warshall(graph):
    n = len(graph)
    dist = [[float('inf')] * n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            if i == j:
                dist[i][j] = 0
            else:
                dist[i][j] = graph[i][j]

    for k in range(n):
        for i in range(n):
            for j in range(n):
                dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])

    return dist

# 示例图
graph = [
    [0, 3, float('inf'), 7],
    [8, 0, 2, float('inf')],
    [5, float('inf'), 0, 1],
    [2, float('inf'), float('inf'), 0]
]

print(floyd_warshall(graph))

相关 LeetCode 题目

Floyd 算法在 LeetCode 上有许多应用,以下是一些相关的题目:

通过解决这些题目,可以加深对 Floyd 算法的理解和应用。

图片展示

Floyd 算法示意图