项目目标
实现一个帮助进行地铁出行线路规划的程序(GUI或命令行)
需求分析
1. 用户交互:GUI(图形接口)方式or控制台(命令行)方式
2. 设计项目目标核心解决方案
解决方案设计思路
1. 对”线路规划”的理解,一个好的线路规划可能有以下衡量标准:
a) 总公里数最少
b) 经过的总站点数最少
c) 预计消耗时间最短
结合生活经验可以发现,总公里数最少的线路的时间消耗未必最短
经过的站点数量对时间消耗有很大影响,但为了简化问题,可以只考虑长度.
2. 程序输入输出
a) 输入文件可以考虑使用CSV文件
b) 直接输出到屏幕显示,也可以导出结果到文件
3. 模型构建和算法选择(设计)
典型的,地铁站点及站点间线路的问题可以抽象成一个图
线路规划问题也变成了求图中两点最短(广义)路径的问题
相应的,以下是两个针对该问题的算法:
a) Dijkstra算法(迪杰斯特拉算法)
该算法用于求一个图中指定两点间最短距离及对应路径
b) Floyd算法(弗洛伊德算法)
该算法用于求图中任意两点的最小路径
很明显,对于给定的图,用弗洛伊德算法更好,只需要一次计算即可求得
任意两点之间的最短路径.
4. 对于程序优化方面的思考
显然,地铁站模型是一个特殊的图模型,即:
大部分地铁站都只发出两条边,在局部上类似于链表的结构
针对这方面可能可以进行部分优化.
解决方案实现工具
C/C++
IDE可以选择VS
解决方案实现计划
1. 数据结构设计
2. 文件结构设计(基于数据结构)
3. 核心算法实现(基于数据结构)
4. 测试
4.5 效率分析以及优化
5. 总结
总结
项目总体上难度不高,核心算法非常经典,实现较容易,但是对于数据结构和文件结构(文件读写)方面,以及如何营造一个较好的用户体验环境方面,有不少值得推敲的地方.