【图论】Floyd算法

原本不想写这个的,但是今天错了一次。写一下让自己以后多一个参考。

Floyd算法初始化两点之间的距离为无穷大,然后自己到自己的距离为0。

然后枚举所有的边,初始化对应两点的边权,注意处理平行边或者自环的情况。推荐用min操作。

第一维枚举中转点k,也就是阶段。
第二第三维枚举图中的两点i, j,也就是状态。

时间复杂度 \(O(n^3)\)

INF = 10**18
dis = [[INF for _ in range(n)] for _ in range(n)]
for i in range(n):
  dis[i][i] = 0

for u, v, w in edges:
  dis[u][v] = min(dis[u][v], w)
  # dis[v][u] = min(dis[v][u], w)

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

print(dis)
posted @ 2024-04-04 02:42  purinliang  阅读(18)  评论(0)    收藏  举报