北京地铁出行路线规划命令行程序
需求分析
1.实现一个地铁出行路线规划命令行程序
2.设计自定义地铁文件,存储并读取地铁线路。
支持采用参数 -map 作为标志,来获取对应的自定义地铁文件,例如:
java subway -map subway.txt
3.输出特定地铁线路。
支持采用参数 -a 来指定地铁线路,采用参数 -o 来输出到指定文件station.txt,例如:
java subway -a 1号线 -map subway.txt -o station.txt
4.根据起点终点站点,输出最短路线并输出。
支持采用参数 -b 来指定出发地与目的地,例如:
java subway -b 洪湖里 复兴路 -map subway.txt -o routine.txt
5.对于错误的输入,在保证程序不报错的情况下,正确输出错误原因。
存储方式
考虑到读取文件易于编辑,直接采用最简单的存储方式,每行第一个字符串为线路名称,后面跟着的字符串为从起点至终点的每一个站点
例如:
1号线 刘园 西横堤 ... ... 双桥河
... ... ... ...
... ... ... ...
... ... ... ...
9号线 天津站 大王庄... ...东海路
数据结构
因为一般地铁线路图属于稀疏图,使用邻接表存储,因为涉及换乘,不同线路间还存在重合路径,两站之间的通路可能属于多个线路,故在邻接表中,除了存储该节点相连的节点外,还要存储该条边属于的地铁线路。
算法设计
较为简单的最短路算法,使用优先队列优化的dijkstra算法即可实现最短路径的规划,以经过站点为第一优先,换成站点为第二优先即可。对于每个站点,仅考虑其第一次出队,即可处理不同线路路线重合的问题。
ps。。。看到题目中输出形式,我感觉问题很大啊,既然是地铁出行,首先上什么车都不输出的话,如果从一个地铁枢纽站出发,难道还要用户自己去找几号线吗。由此引申的问题就是,当不同线路之间路径有重合,从在重合路径上的站点出发,该上那条线路的问题,我觉得既然是地铁线路推荐,在经过站点相同的情况下,应该输出换乘最少的方案。
可能出现的异常
1.读取文件不存在或错误
2.输入线路、站点不存在或者不存在地铁路线满足要求
3.参数错误
4.输出文件已经存在(提示用户重新输入输出文件或覆盖)
项目计划
PSP 2.1 | Personal Software Process Stages | Time |
---|---|---|
Planning | 计划 | |
· Estimate | · 估计这个任务需要多少时间 | 1h |
Development | 开发 | |
· Analysis | · 需求分析 (包括学习新技术) | 1h |
· Design Spec | · 生成设计文档 | 1h |
· Design Review | · 设计复审 (和同事审核设计文档) | 0.5h |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 1.5h |
· Design | · 具体设计 | 3h |
· Coding | · 具体编码 | 3h |
· Code Review | · 代码复审 | 2h |
· Test | · 测试(自我测试,修改代码,提交修改) | 3h |
Reporting | 报告 | |
· Test Report | · 测试报告 | 1h |
· Size Measurement | · 计算工作量 | 1h |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 1.5h |
合计 | 18.5h |