北京地铁线路规划
任务
个人项目的主要任务就是通过地铁出行的人能够通过该软件很快找到最快到达目的地的出行线路规划。
项目需求
- 用户根据-map参数来获得所有北京地铁线路信息
java subway -map subway.txt
那么这里的重点就在于如何存储这个subway.txt文件了,首先我们还是看一张北京地铁1号线的图
![](https://img2018.cnblogs.com/blog/1806411/201909/1806411-20190922113916097-1876119492.jpg)
这里比较容易想到的每条线路存储方式就是
> 1: 苹果园 古城 八角游乐园 ...
> 2: 积水潭 鼓楼大街 安定门 ...
其中1表示1号线,2表示2号线,但是在从图中可以看到打圈的站点,这些站点打圈的表示是可以中转的站台,
这里比较麻烦的就是如何在txt中标明哪个站可以转乘,并且可以转乘几号线,
这里参考了一个同学的博文,他在可以换乘的站台后用(#+数字)的形式来标明该站台可以换成几号线,
如果该站台可以换成多条线路,只要继续在后面加(#+数字)即可,使用#可以在读取文件的时候很容易区分哪个站台可以换乘,
且在数字之间用#分隔,也不会使数字之间混淆
那么存储在txt中的存储格式就变成了这个样子
>1: 苹果园 古城 八角游乐园 ...
>2: 积水潭 鼓楼大街#8 安定门 ...
- 用户通过-a+几号线参数来获得某条线路经过的所有站点信息
java subway -a 1号线 -map subway.txt -o station.txt
其中把获得的线路信息输出在station的txt文件中供用户参考
其中输出样式为
>2号线:积水潭 -> 鼓楼大街(可换乘8号线)-> 安定门 -> ...
- 用户通过-b+起始站点名称+终止站点名称参数来获得一条线路来从指定出发点到达目的地(这条线路要求经过最少的站数)
java subway -b 积水潭 安华桥 -map subway.txt -o routine.txt
这里我认为先用Dijkstra算法把每个站点到其他的任意一个站点的最短线路规划信息先存储在一个txt文件中,然后把该文件放在某个服务器上,
这样每个用户在要求获得某两个站点之间线路规划的时候就直接从服务器中读取该文件并输出相应的线路信息,
这样就不用每一次在用户要求规划线路的时候都去运行一遍算法,大大节省了用户的时间。
当然,这里的输出格式与上面一个需求的输出格式相同
>1: 积水潭 -> 鼓楼大街 -> 换成8号线 -> 安华桥
>2: 积水潭 -> 鼓楼大街 -> ...
之所以这里有'1:' , '2:'这种标志,是因为可能在经过站数相同的情况下有多条线路,这时候就由用户进行选择,毕竟不同的用户可能次要需求也不一样,有些人喜欢换乘最少,但也有些人希望是时间最快到达,这里留给用户自行选择
结语
这次个人项目的站点信息非常多,所以可选的线路出行就会非常多,种类会非常复杂,现在先不考虑各种输入错误,到时候进行统一的输入错误处理吧,程序的测试输入样例也得慢慢想,而且在测试的时候结果的准确性可能还得自己去手动计算是否是符合要求的且是站数最少的,当两个站点相隔比较远的时候这时候人为的去计算还是相当复杂。
参考了这篇博客
原文地址:https://www.cnblogs.com/nicochou/p/11566808.html
时间: 2024-10-06 08:45:33