基于上一篇博客的规划,通过几天的努力,完成了该程序的实现。
源代码传送门
11111111
问题回顾
为了实现地铁出行路线的规划,需要设计一个能够计算地铁线路最短路径的程序。
这里以北京城市轨道交通线网图为例来设计:
线路概览
关于文件输入输出的格式
subway.txt 的存储格式
```text
1号线: 苹果园 古城 八角游乐园 ...
2号线: 西直门#4#13 积水潭 鼓楼大街#8 ...
...
S1线: 金安桥#6 四道桥 桥户营 ...
```
线路名后用“:”与其后站点间隔。
站点间用“ ”间隔。
若某站为换乘站,在其后用“#数字”的方式,表示在当前线路上的该站点可换乘到“#”后数字序号所指的线路上,如2号线的西直门可以换乘到4号线以及13号线。
知识兔station.txt 的输出格式
以查询一号线为例,得到的输出如下:
```text
1号线所经过的站点为: 苹果园 古城 八角游乐园 八宝山 玉泉路 五棵松 万寿路 公主坟(可换乘 10号线)军事博物馆(可换乘 9号线)木樨地 南礼士路 复兴门(可换乘 2号线)西单(可换乘 4号线)天安门西 天安门东 王府井 东单(可换乘 5号线)建国门(可换乘 2号线)永安里 国贸(可换乘 10号线)大望路(可换乘 14号线东)四惠(可换乘 八通线)四惠东(可换乘 八通线)
```
在每个换乘站后面的"()"中显示可换乘的所有线路。
知识兔routine.txt 的输出格式
以查询从中关村到西土城为例,得到的输出如下:
```text
共经过5站
中关村
海淀黄庄
10号线
知春里
知春路
西土城
```
首先输出所经过的站点数,接下来输出所经过的所有站点(包括出发与目的站点),若需要换乘,会在该站下提示换乘的线路。
知识兔功能实现
功能1
得到地铁线路图的信息
一个调用应用程序的示例如下:
知识兔li>java Main -map subway.txt
功能2
查询指定地铁线经过的站点
一个调用应用程序的示例如下:
知识兔li>java Main -a 1号线 -map subway.txt -o station.txt
功能3
计算从出发到目的站点之间的最短路线并输出经过的站点的个数和路径
一个调用应用程序的示例如下:
知识兔li>java Main -b 中关村 西土城 -map subway.txt -o routine.txt
对于功能3的一些测试样例
无换乘
知识兔li>。。。
单次换乘
假设某乘客想要从中关村到西土城,那么输入如下:
知识兔subway.exe -b 中关村 西土城 -map subway.txt -o routine.txt
得到的输出如下:
知识兔5 中关村 海淀黄庄 10号线 知春里 知春路 西土城
5表示从出发到目的站点之间的最短路线为5站。
接下来输出所经过的所有站点(包括出发与目的站点)。
海淀黄庄为4号线与10号线的换乘站,因此在它的下一行输出需要换乘的线路。多次换乘
超长路线
换乘节点-换乘节点
报错处理
起点站与终点站相同
不存在的线路
不存在的站点
最后
。。。