原本不想寫這個的,但是今天錯了一次。寫一下讓自己以後多一個參考。
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)