; Y: \$ m, D6 r% v" ~; n. D```python & T3 s. l. _; V0 c, Ndef floyd_warshall(graph):3 H1 T4 `; R8 x- T
# 初始化距离矩阵 ' L" \3 m2 `9 \ nodes = list(graph.keys()) y: `2 d! r/ P7 K) n0 R distances = {node: {n: float('inf') for n in nodes} for node in nodes} . s6 R0 S3 }' B: L6 U% e, ]9 b2 [# ?, v8 G1 [8 o5 K* `" d
for u in nodes: 7 O- l9 A$ m1 O# g2 X4 e3 \ distances[u][u] = 0 # \9 v6 k, c) u. Q: X! L* { for v, weight in graph[u].items(): ; j# p2 e3 T, C' D8 p& P distances[u][v] = weight 4 h7 e' ^: g' i7 R/ `& s2 c - w" u G# M/ c # 更新路径# f( ]! `8 j& f6 H& @
for k in nodes: 9 z- u) F4 f6 U) Z" Y for i in nodes:) }' B" J( r5 O/ }3 V
for j in nodes:9 n0 c' [/ _1 w( [. m) y% s$ I
if distances[i][j] > distances[i][k] + distances[k][j]:3 q9 n/ w9 `$ n% `, w/ e: h
distances[i][j] = distances[i][k] + distances[k][j] ; e3 ^1 r* Z- Z' n0 E" n" O9 P $ f4 g" N6 Z. Q% e return distances/ G% [. S% [( E) n% W
+ G' S; ^0 b) E* H a# 示例图(可以含负权边) / R7 ]% \6 Y* X- Q5 Xgraph_for_floyd = { 2 }% n! z$ b- ~9 C+ a 'A': {'B': 3, 'C': 8, 'D': -4},% b# h. S( x' w6 P& ^: p$ [9 n
'B': {'C': 1, 'D': 7}, % f1 d# ~- T! m: q 'C': {'B': 4},7 _/ ~; M, M$ O. M( _9 E
'D': {'A': 2, 'C': -5} - a, h8 F7 `0 ?} 2 {8 H. l' T( h G' I. ]; i4 M7 r4 v5 n! P* R
shortest_paths_matrix = floyd_warshall(graph_for_floyd)2 S; k+ G# B3 d; n y7 A8 b; n
for row in shortest_paths_matrix.items(): / a _ `- \/ v, m, p1 s$ x print(row) ) Z) a/ o! X' E& m8 y ````1 [. }/ J2 c) {& j