题目描述
输入描述:
输出描述:
输入 | 输出 |
5 3 3 1 2 3 3 3 4 2 3 3 5 4 | 2 |
说明
思路:
最短路径法:广度优先遍历算法: 从开始节点出发标记能到达站点,再从可以到达的站点进行遍历,标记从该节点出发可到达的站点,直到终点。
代码:
n,m=map(int,input().split())
matrix=[]
for _ in range(m):
a=list(map(int,input().split()))[1:]
a.sort()
matrix.append(a)
dp=[float('inf')]*(n+1)
#从0+1号站出发
dp[1]=0
neighbor=[[] for _ in range(n+1)]
#构建第一个车站到后面车站的边
for m in matrix:
neighbor[m[0]]+=m[1:]
#遍历每个车站,更新到达每个邻居的最短距离
for i in range(1,n+1):
for j in neighbor[i]:
dp[j]=min(dp[j],dp[i]+1)
print(dp[-1])
同类问题