此题中任意两点之间距离是 1,可以直接用广度优先搜索(BFS), 第一次到达n 号点的时候就是最短距离。
from collections import deque from collections import defaultdict def main(): n,m=map(int, input().split()) #有个小坑:点数是 5000,n表示目的点的序号,并不表示说点的序号就是0到n-1 edges=defaultdict(list) for i in range(m): u,v=map(int,input().split()) edges[u].append(v) edges[v].append(u) visited=set() q=deque()#用一个队列就来进行bfs q.append((0,1))#将1号加入队列 while q: #insight: 这道题中提到两个点之间距离是1,所以只需要用bfs,第一次到达n所需要的距离就是最短距离 d,u=q.popleft() visited.add(u) for v in edges[u]: if v==n: return d+1 if v not in visited: q.append((d+1,v)) return -1 print(main())