@@ -703,6 +703,9 @@ public class Main {
703703```
704704
705705### Python
706+
707+ Bellman-Ford方法求解单源有限最短路
708+
706709``` python
707710def main ():
708711 # 輸入
@@ -736,6 +739,48 @@ def main():
736739
737740
738741
742+ if __name__ == " __main__" :
743+ main()
744+ ```
745+
746+ SPFA方法求解单源有限最短路
747+
748+ ``` python
749+ from collections import deque
750+ from math import inf
751+
752+
753+ def main ():
754+ n, m = [int (i) for i in input ().split()]
755+ graph = [[] for _ in range (n+ 1 )]
756+ for _ in range (m):
757+ v1, v2, val = [int (i) for i in input ().split()]
758+ graph[v1].append([v2, val])
759+ src, dst, k = [int (i) for i in input ().split()]
760+ min_dist = [inf for _ in range (n+ 1 )]
761+ min_dist[src] = 0 # 初始化起点的距离
762+ que = deque([src])
763+
764+ while k != - 1 and que:
765+ visited = [False for _ in range (n+ 1 )] # 用于保证每次松弛时一个节点最多加入队列一次
766+ que_size = len (que)
767+ temp_dist = min_dist.copy() # 用于记录上一次遍历的结果
768+ for _ in range (que_size):
769+ cur_node = que.popleft()
770+ for next_node, val in graph[cur_node]:
771+ if min_dist[next_node] > temp_dist[cur_node] + val:
772+ min_dist[next_node] = temp_dist[cur_node] + val
773+ if not visited[next_node]:
774+ que.append(next_node)
775+ visited[next_node] = True
776+ k -= 1
777+
778+ if min_dist[dst] == inf:
779+ print (" unreachable" )
780+ else :
781+ print (min_dist[dst])
782+
783+
739784if __name__ == " __main__" :
740785 main()
741786```
0 commit comments