此题中任意两点之间距离是 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())

京公网安备 11010502036488号