刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

道路(2024.3八级)

N个以 1 ... N 标号的城市通过单向的道路相连:。每条道路包含两个参数:道路的长度和需要为该路付的通行费(以金币的数目来表示)

Bob and Alice 过去住在城市 1.在注意到Alice在他们过去喜欢玩的纸牌游戏中作弊后,Bob和她分手了,并且决定搬到城市N。他希望能够尽可能快的到那,但是他囊中羞涩。我们希望能够帮助Bob找到从1到N最短的路径,前提是他能够付的起通行费。

时间限制:1000

内存限制:65536

输入

第一行包含一个整数K, 0 <= K <= 10000, 代表Bob能够在他路上花费的最大的金币数。第二行包含整数N, 2 <= N <= 100, 指城市的数目。第三行包含整数R, 1 <= R <= 10000, 指路的数目. 接下来的R行,每行具体指定几个整数S, D, L 和 T来说明关于道路的一些情况,这些整数之间通过空格间隔: S is 道路起始城市, 1 <= S <= N D is 道路终点城市, 1 <= D <= N L is 道路长度, 1 <= L <= 100 T is 通行费 (以金币数量形式度量), 0 <= T <=100 注意不同的道路可能有相同的起点和终点。

输出

输入结果应该只包括一行,即从城市1到城市N所需要的最小的路径长度(花费不能超过K个金币)。如果这样的路径不存在,结果应该输出-1。


样例输入

5
6
7
1 2 2 3
2 4 3 3
3 4 2 4
1 3 4 1
4 6 2 1
3 5 2 0
5 4 3 2

样例输出

11

使用微信搜索喵呜刷题,轻松应对考试!

答案:

对于给定的输入,首先读取Bob能够在他路上花费的最大的金币数K,城市的数量N和道路的数量R。然后,根据输入的R条道路信息,建立从城市1到城市N的最短路径图。由于每条道路都是单向的,因此可以使用Dijkstra算法来找到最短路径。在Dijkstra算法中,我们需要维护一个距离数组,记录从起点到每个顶点的最短距离。初始时,将起点到起点的距离设为0,其他顶点的距离设为无穷大。然后,每次从未被访问过的顶点中选取距离最小的顶点,更新其邻居的距离。重复这个过程,直到找到从城市1到城市N的最短路径。最后,输出最短路径的长度。如果这样的路径不存在,输出-1。

解析:

【喵呜刷题小喵解析】:
该题目要求找到从城市1到城市N的最短路径,并且要求Bob能够付得起通行费。因此,我们需要建立一个最短路径图,并使用Dijkstra算法来找到最短路径。在输入中,第一行包含一个整数K,表示Bob能够在他路上花费的最大的金币数。第二行包含整数N,表示城市的数量。第三行包含整数R,表示道路的数量。接下来的R行,每行具体指定几个整数S、D、L和T,表示道路的起点、终点、长度和通行费。

为了解决这个问题,我们可以使用Dijkstra算法来找到最短路径。在Dijkstra算法中,我们需要维护一个距离数组,记录从起点到每个顶点的最短距离。初始时,将起点到起点的距离设为0,其他顶点的距离设为无穷大。然后,每次从未被访问过的顶点中选取距离最小的顶点,更新其邻居的距离。重复这个过程,直到找到从城市1到城市N的最短路径。

在算法的实现中,我们需要使用一个优先队列来存储待访问的顶点,以及一个数组来记录每个顶点的最短距离。每次从未被访问过的顶点中选取距离最小的顶点,将其标记为已访问,并更新其邻居的距离。重复这个过程,直到找到从城市1到城市N的最短路径。

最后,我们需要检查是否存在从城市1到城市N的最短路径。如果存在,输出最短路径的长度;否则,输出-1。

需要注意的是,由于每条道路都是单向的,因此在建立最短路径图时,我们需要考虑道路的方向。另外,不同的道路可能有相同的起点和终点,因此在建立最短路径图时,我们需要考虑重复边的情况。
创作类型:
原创

本文链接:道路(2024.3八级) N个以 1 ... N 标号的城市通过单向的道路相连:。每条道路包含两个参

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share