在这道题中,我们需要帮助塔子规划从起点星球到终点星球的最短路径,给定的路径由若干通行证定义。输入包括通行证的数量和起点、终点的编号,以及每个通行证的起止星球。输出应为塔子需要经过的星球数量(不包括起点),若无法到达终点,则返回 -1。我们可以使用广度优先搜索(BFS)算法来解决此问题,通过构建星球间的图结构,逐层探索可达星球,以找到最短路径或判断不可达。
朴素的bfs求最短路的题
星际漫游是需要通行证的,塔子收集多年,希望来一次跨越群星的路程,去到一个叫做蓝星的星球,听说那里有一个二字游戏,非常好玩。
很不幸的是,塔子只有若干星球之间的通行证,为了尽快到达心心念念的蓝星,塔子决定找你帮忙规划一下线路。这里规定星际漫游的耗时与经历的星球数成正比。
规定,所有的星球都被编号,从1开始。
时间限制:C/C++800ms,其他语言:1600ms 内存限制:C/C++60MB,其他语言: 120MB
塔子拥有的通行证数目n以及塔子漫游的起点编号m1(0≤m1≤100000)和终点编号m2(0≤m2≤100000),
之后n行依次为n个通行证,每个通行证有两个数字,用空格隔开,分别表示该通行证允许通行的起点星球编号和终点星球编号。
注意,只能从起点星球飞往终点星球。
计算塔子需要经过的星球数目,不包括起点星球,若无法到达目的地,则返回−1
输入
1 1 2
1 2
输出
1
解释
本例表示:塔子有1个通行证,刚好直达蓝星,经过蓝星,故输出1。
输入
3 2 1
1 4
3 2
3 5
输出
-1
解释
拥有的三个通行证无法保证塔子能从编号为2的星球到达编号为1的蓝星,塔子因玩不到二字游戏悲痛欲绝,因此结果为−1