代码随想录算法训练营day60| 城市间的货物运输之1、2、3
学习资料:https://www.programmercarl.com/kamacoder/0094.城市间货物运输I-SPFA.html
SPFA算法(Bellman_ford队列优化算法)
学习记录
94.城市间的货物运输(两种方法)
点击查看代码
# 法二
import collections
def main():
n, m = map(int, input().split())
edges = [[] for _ in range(n+1)]
for _ in range(m):
src, dest, weight = map(int, input().strip().split())
edges[src].append([dest, weight])
minDist = [float("inf")] * (n+1)
minDist[1] = 0
que = collections.deque([1])
visited = [False]*(n+1)
visited[1]=True
while que:
cur = que.popleft()
visited[cur] = False
for dest, weight in edges[cur]:
if minDist[cur] != float("inf") and minDist[cur]+weight<minDist[dest]:
minDist[dest] = minDist[cur]+weight
if visited[dest] == False:
que.append(dest)
visited[dest]=True
if minDist[-1] == float("inf"):
return "unconnected"
return minDist[-1]
if __name__ == "__main__":
print(main())
# def main():
# n, m = map(int, input().split())
# edges = []
# for _ in range(m):
# src, dest, weight = map(int, input().split())
# edges.append([src, dest, weight])
# minDist = [float("inf")]*(n+1)
# minDist[1]=0
# for i in range(1, n):
# updated = False
# for src, dest, weight in edges:
# if minDist[src] != float("inf") and minDist[src]+weight<minDist[dest]:
# minDist[dest] = minDist[src]+weight
# updated = True
# if not updated:
# break
# if minDist[-1]==float("inf"):
# return "unconnected"
# return minDist[-1]
# if __name__ == "__main__":
# print(main())
95.城市间货物运输2(判断负权回路)
点击查看代码
import sys
def main():
input = sys.stdin.read
data = input().split()
index = 0
n = int(data[index])
index += 1
m = int(data[index])
index += 1
grid = []
for i in range(m):
p1 = int(data[index])
index += 1
p2 = int(data[index])
index += 1
val = int(data[index])
index += 1
# p1 指向 p2,权值为 val
grid.append([p1, p2, val])
start = 1 # 起点
end = n # 终点
minDist = [float('inf')] * (n + 1)
minDist[start] = 0
flag = False
for i in range(1, n + 1): # 这里我们松弛n次,最后一次判断负权回路
for side in grid:
from_node = side[0]
to = side[1]
price = side[2]
if i < n:
if minDist[from_node] != float('inf') and minDist[to] > minDist[from_node] + price:
minDist[to] = minDist[from_node] + price
else: # 多加一次松弛判断负权回路
if minDist[from_node] != float('inf') and minDist[to] > minDist[from_node] + price:
flag = True
if flag:
print("circle")
elif minDist[end] == float('inf'):
print("unconnected")
else:
print(minDist[end])
if __name__ == "__main__":
main()
96.城市间货物运输3(单源有限最短路)
没写!竟然没有Python解法,下次学习一下算法思路算咯
PS:今天真真是抄的,明天来仔细学吧,今天要累死了。再一次坚定了不要996。吃的也不好吃炒饭腻的很,
今天天气真好,银杏树黄咯,好美啊
工作和论文进展+1
浙公网安备 33010602011771号