Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[pull] master from youngyangyang04:master #514

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
pull merged 5 commits into AlgorithmAndLeetCode:master from youngyangyang04:master
Dec 23, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
添加 0096.城市间货物运输III python3 SPFA版本
  • Loading branch information
SWJTUHJF committed Nov 12, 2024
commit 6c497c692b53da154458e82d719cc9c25268e132
45 changes: 45 additions & 0 deletions problems/kamacoder/0096.城市间货物运输III.md
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -703,6 +703,9 @@ public class Main {
```

### Python

Bellman-Ford方法求解单源有限最短路

```python
def main():
# 輸入
Expand Down Expand Up @@ -736,6 +739,48 @@ def main():



if __name__ == "__main__":
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)]
for _ in range(m):
v1, v2, val = [int(i) for i in input().split()]
graph[v1].append([v2, val])
src, dst, k = [int(i) for i in input().split()]
min_dist = [inf for _ in range(n+1)]
min_dist[src] = 0 # 初始化起点的距离
que = deque([src])

while k != -1 and que:
visited = [False for _ in range(n+1)] # 用于保证每次松弛时一个节点最多加入队列一次
que_size = len(que)
temp_dist = min_dist.copy() # 用于记录上一次遍历的结果
for _ in range(que_size):
cur_node = que.popleft()
for next_node, val in graph[cur_node]:
if min_dist[next_node] > temp_dist[cur_node] + val:
min_dist[next_node] = temp_dist[cur_node] + val
if not visited[next_node]:
que.append(next_node)
visited[next_node] = True
k -= 1

if min_dist[dst] == inf:
print("unreachable")
else:
print(min_dist[dst])


if __name__ == "__main__":
main()
```
Expand Down

AltStyle によって変換されたページ (->オリジナル) /