给你一个无向图,图中包含 5000 个点 m 个边,任意两个点之间的距离是 w ,无重边或自环。请求出1号点到n号点的最短距离。
注意:图中可能存在孤立点,即存在点与任意点都没有边相连
如果1号点不能到达n号点,输出-1.
第一行两个整数n和m,表示图的点和边数。接下来m行,每行三个整数u,v, w,表示u到v有一条无向边, 长度为w。![]()
![]()
![]()
输出一行,表示1到n的最短路,如不存在,输出-1.
4 4 1 2 3 2 4 7 3 4 5 3 1 3
8
4 3 1 2 5 2 3 3 3 1 3
-1
1号点不能到4号点。
import heapq
n, m = map(int,input().strip().split())
graph = [[] for _ in range(5001)]
for _ in range(m):
u,v,w = map(int,input().strip().split())
graph[u].append((v,w))
graph[v].append((u,w))
dist = [float('inf')]*(5001)
dist[1] = 0
pq = [(0,1)] # heap中排序的顺序是基于元组中第一个元素的,所以距离在前
while pq:
d, u = heapq.heappop(pq)
for v,w in graph[u]:
if dist[u]+w < dist[v]:
dist[v] = dist[u] + w
heapq.heappush(pq,(dist[v],v))
print(dist[n] if dist[n]!=float('inf') else -1)