题解 | #【模板】单源最短路1#
【模板】单源最短路1
https://www.nowcoder.com/practice/f24504c9ff544f7c808f76693cc34af8
from collections import defaultdict
import heapq
def dijkstra(e, s):
"""
输入:
e:邻接表
s:起点
返回:
dis:从s到每个顶点的最短路长度
"""
dis = defaultdict(lambda: float("inf"))
dis[s] = 0
q = [(0, s)]
vis = set()
while q:
_, u = heapq.heappop(q)
if u in vis:
continue
vis.add(u)
for v, w in e[u]:
if dis[v] > dis[u] + w:
dis[v] = dis[u] + w
heapq.heappush(q, (dis[v], v))
return dis
s = 1
# n个结点,m条边
n,m = map(int, input().split())
# 构建邻接表,其元素为{u:[(v1,w1),(v2,w2)]}
neighbors = defaultdict(list)
for _ in range(m):
u,v = map(int, input().split())
w = 1
neighbors[u].append((v,w))
neighbors[v].append((u,w))
dis = dijkstra(neighbors, s)[n]
print((lambda x: -1 if x == float('inf') else x)(dis))

