mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 15:09:40 +08:00
添加 0095.城市间货物运输II python3 SPFA版本
This commit is contained in:
@ -333,6 +333,8 @@ public class Main {
|
||||
|
||||
### Python
|
||||
|
||||
Bellman-Ford方法求解含有负回路的最短路问题
|
||||
|
||||
```python
|
||||
import sys
|
||||
|
||||
@ -388,6 +390,52 @@ if __name__ == "__main__":
|
||||
|
||||
```
|
||||
|
||||
SPFA方法求解含有负回路的最短路问题
|
||||
|
||||
```python
|
||||
from collections import deque
|
||||
from math import inf
|
||||
|
||||
def main():
|
||||
n, m = [int(i) for i in input().split()]
|
||||
graph = [[] for _ in range(n+1)]
|
||||
min_dist = [inf for _ in range(n+1)]
|
||||
count = [0 for _ in range(n+1)] # 记录节点加入队列的次数
|
||||
for _ in range(m):
|
||||
s, t, v = [int(i) for i in input().split()]
|
||||
graph[s].append([t, v])
|
||||
|
||||
min_dist[1] = 0 # 初始化
|
||||
count[1] = 1
|
||||
d = deque([1])
|
||||
flag = False
|
||||
|
||||
while d: # 主循环
|
||||
cur_node = d.popleft()
|
||||
for next_node, val in graph[cur_node]:
|
||||
if min_dist[next_node] > min_dist[cur_node] + val:
|
||||
min_dist[next_node] = min_dist[cur_node] + val
|
||||
count[next_node] += 1
|
||||
if next_node not in d:
|
||||
d.append(next_node)
|
||||
if count[next_node] == n: # 如果某个点松弛了n次,说明有负回路
|
||||
flag = True
|
||||
if flag:
|
||||
break
|
||||
|
||||
if flag:
|
||||
print("circle")
|
||||
else:
|
||||
if min_dist[-1] == inf:
|
||||
print("unconnected")
|
||||
else:
|
||||
print(min_dist[-1])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
### Go
|
||||
|
||||
### Rust
|
||||
|
Reference in New Issue
Block a user