1.题目描述
描述: 已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。
地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18
地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15
输入: 输入两个不同的站名
输出: 输出最少经过的站数,含输入的起点和终点,换乘站点只计算一次
样例输入: A1 A3
样例输出: 3
2.题目分析
题意如图1所示,本题关键是B5、B6,A9、A10,B10、B11,A13、A14不连续,中间有相交点,另有上下两个环。当然不用图论算法,也可以解答本题。只不过,要列出所有可能的情况,在短时间内,难免考虑的全面。作者之前就是考虑不用图做的,但做到最后,几个小时,一直有几个测试用例通过不了,考虑不全面。当然,实验室的其他同学也遇到过类似的问题。当问题的规模增加,如增加几条线路,那么这种方法,就不再好用呢。一是代码量线性增加,若列出所有情况,逻辑上也容易出错。
因此,便对此题深入研究了一下,诉之于图论算法,当然也不需要特别高深的图论算法,最简单的图的最短路径广度优先算法就够了。下面予以实现。