File tree Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change @@ -333,6 +333,8 @@ public class Main {
333333
334334### Python
335335
336+ Bellman-Ford方法求解含有负回路的最短路问题
337+
336338``` python
337339import sys
338340
@@ -388,6 +390,52 @@ if __name__ == "__main__":
388390
389391```
390392
393+ SPFA方法求解含有负回路的最短路问题
394+
395+ ``` python
396+ from collections import deque
397+ from math import inf
398+
399+ def main ():
400+ n, m = [int (i) for i in input ().split()]
401+ graph = [[] for _ in range (n+ 1 )]
402+ min_dist = [inf for _ in range (n+ 1 )]
403+ count = [0 for _ in range (n+ 1 )] # 记录节点加入队列的次数
404+ for _ in range (m):
405+ s, t, v = [int (i) for i in input ().split()]
406+ graph[s].append([t, v])
407+
408+ min_dist[1 ] = 0 # 初始化
409+ count[1 ] = 1
410+ d = deque([1 ])
411+ flag = False
412+
413+ while d: # 主循环
414+ cur_node = d.popleft()
415+ for next_node, val in graph[cur_node]:
416+ if min_dist[next_node] > min_dist[cur_node] + val:
417+ min_dist[next_node] = min_dist[cur_node] + val
418+ count[next_node] += 1
419+ if next_node not in d:
420+ d.append(next_node)
421+ if count[next_node] == n: # 如果某个点松弛了n次,说明有负回路
422+ flag = True
423+ if flag:
424+ break
425+
426+ if flag:
427+ print (" circle" )
428+ else :
429+ if min_dist[- 1 ] == inf:
430+ print (" unconnected" )
431+ else :
432+ print (min_dist[- 1 ])
433+
434+
435+ if __name__ == " __main__" :
436+ main()
437+ ```
438+
391439### Go
392440
393441### Rust
You can’t perform that action at this time.
0 commit comments