编程语言
首页 > 编程语言> > 简易地铁路线规划程序

简易地铁路线规划程序

作者:互联网

写文档使人头大,呜呜呜(╥╯^╰╥)

项目信息

课程 https://edu.cnblogs.com/campus/gdgy/cse2021
作业要求 https://edu.cnblogs.com/campus/gdgy/cse2021/homework/12288
作业目标 掌握广度优先搜索,可达矩阵,迪科斯彻算法等
GitHub https://github.com/Wulalalala0-0/MetroRoute

实现过程

本程序 pojo 类:

// 用于存储地铁线路
public class MetroLine {
	// 地铁线路名
    private String name;
	// 该线路经过的所有地铁站
    private final List<MetroStation> stations;
    
}
// 用于存储地铁站
public class MetroStation {
	// 地铁站名
    private String name;
    // 该地铁站包含的所有线路
    private final List<MetroLine> lines;
}
// 用于存储中途搜索产生的数据
public class ResultCache {
	// 起始站点
    private MetroStation startStation;
	// 终点站
    private MetroStation endStation;
	// 换乘位置
    private final Map<Integer, MetroLine> transfer;
	// 距离(一个站距离为1,替换为时间权重会规划更加准确)
    private int distance;
	// 经过的所有站
    private final List<MetroStation> allPassedStations;
}

我们首先需要预处理文本,本程序将文本中的地铁站存储至 RouteSource.stationMap ,地铁线路存储至 RouteSource.lineMap ,其键为该站的名字或线路名,值为 pojo 类,存储时由于使用的是引用类型,故可直接将站点和线路关联起来,在遍历时补充完整

在站点间距离恒为1的情况下我们使用广度优先搜索算法(也可以说是贪心算法的演变)进行遍历,得到的结果存于 RouteService.shortestRoute ,最后将最先遍历到终点的 ResultCache 输出

算法分析

本程序有超多前辈的算法可借鉴,现在多用矩阵运算(图的思想),需要的数据就是站点间的关联及经纬度数据,可抓包获得,使用此方法可简化运算量

但由于作者懒得写就用了人尽皆知的广度优先搜索算法(由于确定站点间的距离为1,即便使用循环单步遍历,整体看还是符合广度优先搜索算法的主要思想),具体内容可以在各大网站学习,这里就不再赘述了,如果站点间距离不全为1,那么我们便可使用迪科斯彻算法

测试截图

image
image

标签:线路,存储,地铁站,程序,private,站点,简易,铁路线,final
来源: https://www.cnblogs.com/imsisi/p/15354595.html