题面描述
在这个问题中,给定多条地铁线路,包括L形和O形,要求计算从起点到终点的最短移动路线数量、最短路线长度以及最优移动路线数量。输入包括线路数量、每条线路的站点信息及起止站编号。输出分别为最短路线的数量、长度,以及最优路线的数量。如果没有可行路线,分别输出-1或0。
思路
解题思路是通过构建邻接表表示地铁线路的节点关系,并使用广度优先搜索(BFS)算法寻找起点到终点的最短路径。BFS能够保证找到无权图中的最短路径,并在遍历过程中统计路径数量。
在地铁线路的设计中,O形线路和L形线路具有不同的特性和适用场景,这些特性影响了路径搜索和计算的复杂性。下面讨论这两种线路的主要情况和差异:
P2373.第1题-铁路线路优化
题目内容
有若干个地铁线路。所有地铁线路分为L形线和O形线
L形线有两个端点,在端点处的站点只能往另外一端移动,在非端点处则有两个移动方向可选择。
O形线也称O线,没有端点,在任一站都有两个移动方向可选择。
所有地铁站线中有以下两种移动方式:
- 从一个线路中的一个站移动到当前线路的另一个站点
- 从一个线路中的一个站点跳跃到另一条绳子的另一个站点
所有n个站点都被编号,从1到n,选择其中一个作为起点,再选择另一个作为终点。
一次输入一条线路上所有结的编号:例如{1,5},表示一条L形线路,两端为1,5。例如{1,2,3,4,1},表示一条O形线路。这两条线路在1这个站点允许从一条线路跳到另一条线路的站点上,即可以从L形线路的1站点跳到O形线路的2站点,也可以从O形线路的1站点跳到L形线路的5站点。
规定了一系列输出:
- 最短跳跃路线数目:满足最短路线长度要求的所有路线的数目
- 最短跳跃路线长度(不计算起点)
- 最优跳跃路线数目:满足最短跳跃路线长度要求的跨绳跳跃次数最少的路线的数目
解答要求
时间限制: C/C++1000ms,其他语言: 2000ms
内存限制:C/C++256MB其他语言:512MB
输入
第一行:第一个正整数M,表示地铁线路的条数M,M的范围是[1,500]。
第二行:列出M条地铁线路的站点数N(1),N(2),...,N(M),用空格分隔,注意,0形线的首尾各算一个站点,例[1,3,6,7,4,1],站点数N记为6。
第三行到第M+2行:列出M条地铁线路的站点信息,站京ID用空格分隔,站点数的范围是[1,2000],站点ID是32位正整数。
第M+3行:列出起点和终点,用空格分隔,如果起点或终点不在M条地铁线路上,或者,起点和终点是同一个站点时,则认为不存在最短路线。
输出
第一行:输出最短移动路线的数目。注意:如果不存在最短移动路线,则输出−1
第二行:输出最短移动路线长度,注意:如果不存在最短移动路线,则输出−1。
第三行:输出最优移动路线的数目。注意:如果不存在最优移动路线,则输出0。
样例
输入
1
3
1 3 1
1 3
输出
1
1
1
解释
- 最短线路有1条:{1,3}
- 根据1的结果,最短线路线长度是1
- 最优路线有1条:{1,3}
样例2
输入
4
5 5 3 2
1 2 3 4 5
1 10 9 7 6
5 7 8
11 5
1 11
输出
2
5
1
解释
- 最短路线有2条,分别是{1,2,3,4,5,11}和{1,10,9,7,5,11}
- 根据1的结果,最短路线长度是5
- 最优路线有1条:{1,2,3,4,5,11} (换乘一次)