地铁线路项目简析
一、需求分析
根据这次所给出的题目,首先要做的就是需求分析,根据题目要求及个人理解,得出的需求结果如下:
1、确定储存及读取地铁线路数据文件的格式
2、支持用户输入的地铁线路的查询
3、提供用户指定两站点间的最短乘车路径的方案(可换乘)
二、实现思路(暂定,待优化)
根据上面得出的需求分析,个人想到的相应解决方案如下:
1、使用json格式存取数据
题目要求:在开始设计程序之前,请先思考并设计一种文件格式用于存储地铁信息。一方面,这种文件格式要简洁易懂,可以灵活扩展,另一方面它又要方便应用程度读取。请在博客中给出你定义的文件格式的前5行,并以它为例简要说明它的设计理念。
基于对本要求的考量,最终选择了json格式。以下给出自己设计用于存取地铁信息的json格式(仅给出部分,ps:初次接触,尚不熟练,不喜轻喷):
{
{
'Line' : 'S1线',
'Station' : ['金安桥', '四道桥', '桥户营', '上岸', '栗园庄', '小园', '石厂']
},
……
……
}
'Line'为线路名称,'Station' 为站名。
2&3、使用java语言进行编程
理由:本学期有其他需要java的课,俗话说熟能生巧,借此机会多用用java来编程
由分析可知,该地铁线路的项目本质上就是求无向图的最短路径问题。由所学的数据结构可知,当读入数据后,我们可以用邻接表或邻接矩阵来来存储数据,但是由于地铁站点过多且除可换乘的站点外,大多站点只与前后相邻站点之间存在边,所以得到的图可认为是稀疏图,故用邻接矩阵来存储会有大量的INF数据存在,对空间浪费极大,故我们使用邻接表来存储,以此可以节省大量不必要的空间。
针对需求2,输出地跌路线,我们可以遍历存储的邻接表来得到,但我想另外开一个数组来直接存储相应地铁节点名称,虽然增大了一点空间开销(其实200左右个站点名感觉所需的空间也不大),但是可以提高运行速度(单就需求二而言,对三无影响)。
针对需求3,对于最短路径,我们可以选择Dijkstra算法或Floyd算法。
三、异常分析(可能存在或出现)
1、线路或站点不存在
。。。。。。嗯,其他暂时想不到了,暂时先写这么多,后续在编程及运行中出问题了再补充。
更改:最终选择了bfs感觉就本题而言更为便捷,并修改了json格式,自己用java swing写了简单的UI,用下拉框选择站点所以直接排除了非法输入。