2 H! e/ H) u) v; `% G3. **检查负权回路**: 0 ]. o' L: s1 f! |. z$ E - 再次对所有边进行一次松弛检查,如果有边的距离仍能被更新,则说明图中存在负权回路。 # p; {" f2 t0 f& A% q1 Q, N- W2 ?6 }. e# e( A `9 C9 s
### 示例代码 , g' `0 x0 I' t) I- P* ]. u 2 L: E( L1 i# H0 X4 n$ g```python 2 r+ n% d1 U& O" h6 O: s( ldef bellman_ford(graph, start):+ D% v; r- f8 g0 H7 A
# 初始化距离1 P8 w5 l' x7 m9 E
distances = {node: float('inf') for node in graph}9 W3 x! Y1 D. D1 U" z1 B
distances[start] = 02 M7 h& Q6 d- t5 k0 i9 b S* [; u2 B
& U& p$ n8 h, Q# I+ s) V # 松弛操作; b& y+ O! A' \$ C. z" H
for _ in range(len(graph) - 1): ! v8 X9 w. }' o0 c3 \6 U- o+ Z, D for u in graph:1 b& @0 |+ x2 d: ~6 g* Z1 {
for v, weight in graph[u].items():0 G7 S E3 }/ U/ N8 _# S" k6 m
if distances[u] + weight < distances[v]: / o; U, y4 ?! V* g0 k0 m: Q( M distances[v] = distances[u] + weight ! ^+ k8 d. I6 y6 X 0 T# |( @; x! V# f" n # 检查负权回路- ]9 U* X2 Y% d& V% `' a# K
for u in graph: 0 w- Y; G7 K1 Z2 ^ for v, weight in graph[u].items(): * h( ]1 @% \* y J; U if distances[u] + weight < distances[v]:3 q/ ^/ X! K( H. p* W
raise ValueError("Graph contains a negative weight cycle")- ^2 M. p* t2 N6 x
: A' S) m, B: d4 h7 @. d7 Dshortest_paths_matrix = floyd_warshall(graph_for_floyd)7 V: H6 @ y3 ?8 y: s0 n# O
for row in shortest_paths_matrix.items():. P8 e, d' y! ~. X7 z
print(row)* L' i: d! I8 {) l. @
```) O6 v6 O" b- K