单源最短路
无权图最短路径
# look for shortest path from start -> u
queue = [(start, 0)]
vis = set([start])
while queue:
v, cost = queue.pop(0)
if v==u: return cost
for u in graph[v]:
if u in vis: continue
queue.append(u)
return -1加权图最短路径
# 求"给予起点start和目的地u的最短路径"
dist = {start: 0} # 最小dist
queue = [(0, start)] # 最小dist堆
vis = set() # 访问过的点
while queue:
cost, v = heapq.heappop(queue)
if v in vis: continue
vis.add(v)
for n, wt in graph[v]:
ncost = cost + wt
if ncost < dist.get(n, float('inf')):
dist[n] = ncost
heapq.heappush(queue, (ncost, n))
return distLast updated