一共有7个功能 详细见使用方式
主要使用了dijkstra的单源最短路算法
在考虑换乘时,我们的方法是对于同一站点所在不同线路的情况,将一个站点拆分成多个点,例如出在1号线的a点,处在2号线的a点,并且在他们之间连边以表示换乘所需要的时间。
最后在这样一个包含虚点的图上跑dijkstra算法 同时记录前驱 表示谁更新的自己 最后输出路径时不断寻找前驱 直到找到终点
本项目所有代码使用c++11完成
输入文件,输出文件,main均使用utf-8编码 如出现乱码 请确保您的使用utf-8打开 并使用utf-8编码输出 (建议使用vscode打开 并在tasks.json中的args加入类似"-fexec-charset=UTF-8"的指令)
在read.in中输入
先输入一个数字表示需求类型
1 start_name end_name 表示寻找一条从起点到终点的耗时最短路径
2 start_name end_name 表示寻找一条从起点到终点的时间相对较短 但又少换乘
3 start_name end_name1 end_name2 表示二人一起从起点出发 去到不同的终点 但是要求尽量有多的一起走的路程 输出两种方案
4 起点名字 终点名字 途径站点的数量 依次输入站点 表示从起点到终点 并且依次经过中转点的路程
5 起点名字 终点名字 途径站点的数量 依次输入站点 表示从起点到终点 需要经过的中转点 程序会给出以何种顺序访问这些中转点时间最少
6 起点名字 终点名字 此时哪条线路停运了 表示在这条站点停运的情况下的路线
7 起点名字 终点名字 计算所需要的钱
参见read.in 和 ans.out