项目需求
- 实现一个帮助进行地铁出行路线规划的命令行程序
- 地铁线路图数据须要与执行程序解耦
- 支持查询单条线路的全部站点
- 支持查询任意两站之间经过最少站数的路线
算法设计
项目中最主要的点在于:找出两个站点之间经过最少站数的路线。该点对应的经典模型是“在一个无向图中找出两点之间的最短路径”。各个站点即为无向图中的点,两站间的路径即为无向图中链接两个节点的边,在此需求下,全部边的长度均为1
。算法
地铁最短路的换乘,最贴近实际的状况是“一次初始化,屡次查询”,即在地图肯定下来以后可能会有若干次不一样点对的查询。而本需求中地铁线路图数据须要与执行程序解耦,每次查询对于地图数据均可能是不一样的,因此初始化的时间应该均摊到每次查询中去。因为地铁地图属于稀疏图,故能够用SPFA
算法解决。学习
细节上,为了解决两条线路覆盖的状况下(见下图),连续换乘的问题,须要更好的换乘算法。测试
解决方法:经过判断站点和前继站点的所在线路是否有重叠来判断是否须要换乘。编码
存储设计
数据存储上,能够采用存点/存边两种形式。在本项目中,存边会明显优于存点。spa
- 简洁易懂。数据中每一个条目表示两个站点中的一条通路。
- 易于扩展。添加站点方便;数据不须要有序。
- 方便应用程度读取。数据中每一个条目即为图中的一条边,方便建图。
具体到内容,整个数据文件能够被几条线路分红几个大的模块,每一个模块存一条线路的数据,因为地铁站名不存在同名的状况,能够不存线路换乘站点的信息,经过同名同名判断便可。因为同一条边不可能同时属于两条线路,因此在边信息上不会存在冗余。每一个模块由一个星号(*
)开始,后面这个这条线的名称。接下来包含若干条边信息。每条边信息的格式为起点站名称 终点站名称
。每条线的起点能够由建图后入度为 0
的点肯定。命令行
样例以下:设计
* 1号线 刘院 西横堤 果酒场 本溪路 ...(省略) 咸水沽北 双桥河 * 9号线 天津站 大王庄 大王庄 十一经路 ...(省略)
项目计划表
项目计划表 | 用时 |
---|---|
计划 | |
· 估计这个任务须要多少时间 | 30min |
开发 | |
· 需求分析 (包括学习新技术) | 30min |
· 生成设计文档 | 30min |
· 设计复审 (和同事审核设计文档) | 30min |
· 代码规范 (为目前的开发制定合适的规范) | 30min |
· 具体设计 | 30min |
· 具体编码 | 1h |
· 代码复审 | 1h |
· 测试(自我测试,修改代码,提交修改) | 1h |
报告 | |
· 测试报告 | 1h |
· 计算工做量 | 1h |
· 过后总结, 并提出过程改进计划 | 1h |
· 合计 | 9h |