【图论】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)

浙公网安备 33010602011771号