题目如下:
已知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地铁线 A (直线)经过车站: B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15
输入:输入两个不同的站名
输出:输出最少经过的站数,含输入的起点和终点,换乘站点只计算一次
该题网上有很多方案:从if+else到看不懂的代码 到 复杂大很高级的算法。如经典的最短路径(这里面有环,比较麻烦),图论算法。
参考: http://blog.csdn.net/xc889078/article/details/10805167
http://blog.csdn.net/hswangjiajia/article/details/21113647
这些算法都很好,不过感觉有点大才小用了。
首先,只有两班车。其次,也只有两个交叉点。
我提供一个简单的算法:(c/c++)
1 找到 T1,T2在 两条线路的位置,存下来。
2 找到站点1 和站点2 的位置 ;如果同列车,不需换乘,直接返回结果。
3 计算 站点1和站点2,分别到T1,T2的距离和,选出最小的就是最短路径了。
注意事项:1 距离可以通过计算路径上的空格符来标识。
还请大家多多指点。