给定一个 n𝑛 个点 m𝑚 条边的有向图,图中可能存在重边和自环。
所有边的长度都是 11,点的编号为 1∼n1∼𝑛。
请你求出 11 号点到 n𝑛 号点的最短距离,如果从 11 号点无法走到 n𝑛 号点,输出 −1−1。
输入格式
第一行包含两个整数 n𝑛 和 m𝑚。
接下来 m𝑚 行,每行包含两个整数 a𝑎 和 b𝑏,表示存在一条从 a𝑎 走到 b𝑏 的长度为 11 的边。
输出格式
输出一个整数,表示 11 号点到 n𝑛 号点的最短距离。
数据范围
1≤n,m≤1051≤𝑛,𝑚≤105
输入样例:
4 5
1 2
2 3
3 4
1 3
1 4
输出样例:
1
思路
bfs来找最短路径
dis[]:用来存储节点1到任何节点i的最短路径,初始都为-1
from collections import deque
N = int(1e5+10)
n, m = map(int, input().split())
g = [[]for _ in range(n+1)]
dis = [-1] * N
def bfs():
q = deque()
q.append(1)
dis[1] = 0
while q:
x = q.popleft()
for temp in g[x]:
if dis[temp] == -1:
dis[temp] = dis[x] + 1
q.append(temp)
return dis[n]
for i in range(m): # 邻接矩阵
a, b = map(int, input().split())
g[a].append(b)
# print(g)
print(bfs())