ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

简易地铁路线规划程序

2021-09-29 22:03:11  阅读:184  来源: 互联网

标签:线路 存储 地铁站 程序 private 站点 简易 铁路线 final


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

项目信息

课程 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有