在这个问题中,给定多条地铁线路,包括L形和O形,要求计算从起点到终点的最短移动路线数量、最短路线长度以及最优移动路线数量。输入包括线路数量、每条线路的站点信息及起止站编号。输出分别为最短路线的数量、长度,以及最优路线的数量。如果没有可行路线,分别输出-1或0。
解题思路是通过构建邻接表表示地铁线路的节点关系,并使用广度优先搜索(BFS)算法寻找起点到终点的最短路径。BFS能够保证找到无权图中的最短路径,并在遍历过程中统计路径数量。
在地铁线路的设计中,O形线路和L形线路具有不同的特性和适用场景,这些特性影响了路径搜索和计算的复杂性。下面讨论这两种线路的主要情况和差异:
有若干个地铁线路。所有地铁线路分为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
解释
输入
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
解释