地铁路线规划
时间:2019-10-14
本文章向大家介绍地铁路线规划,主要包括地铁路线规划使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
地铁路线规划
一.简述:
本次地铁出行线路规划个人项目,选择使用的编程语言是java语言,编程工具是eclipse,且为了降低难度与简化要求,现阶段我们可以假定程序的输入一定是正确的。同时,为了让地铁程序能与地铁线路图解耦,我们需要将地铁线路与程序分离开,将其保存成一个可读入的文件,data.txt文件。把所有线路的信息按照一定格式输入。在地铁程序上实现了三个项目需求,txt文件的导入,用户希望查询指定地铁线经过的站点的实现,两个站点间最短路径的算法实现,最后对程序进行了多次测试,都成功。
二.PSP表:
三.项目说明:
1.txt文件的输入格式:
站点 下一个站点 距离
刘园 西横堤 1 西横堤 果酒厂 1 果酒厂 本溪路 1 本溪路 勤俭道 1 。。。。。。
2.包,类的功能
Model包:用来存放自定义的四个实体类,距离类,缓存类,节点类,路径类。
Manager包:用来存放两个方法,txt文件的导入,需求的几号线输出,两个站点最短路径的输出。
Test包:用来测试几个需求的包。
3.最短路径算法
public class ComputeShort { private Data data; // 存储数据的类 private EasyCache cache = new EasyCache(); // 缓存数据,防止数据量过大导致内存溢出 private Path getShortDis(Node a, Node b, Set<Node> visited) { // Set里的值是和放入顺序无关的固定顺序,这里恰好可以做cache的key String key = a.toString() + b.toString() + visited; Path rs = (Path) cache.get(key); if (rs != null) { //System.out.println("read from cache : " + key); return rs; } // cache里没有则计算 rs = new Path(); // 访问过了则返回 if (visited.contains(a)) { cache.put(key, rs); return rs; } else { visited.add(a); rs.getPath().add(a); } // 如果是相连的直接返回结果 if (a.isConnected(b)) { rs.getPath().add(b); rs.setDis(data.getDis().get(a, b)); cache.put(key, rs); return rs; } else { // 否则递归调用 Iterator<Node> nodes = a.getConnected(); int tempRs = -1; LinkedList<Node> path_temp = null; while (nodes.hasNext()) { Node temp = nodes.next(); Integer dis = -1; Set<Node> visted_child = new HashSet<Node>(); visted_child.addAll(visited); Path child = getShortDis(temp, b, visted_child); if (child.getDis() == -1) continue; dis = data.getDis().get(a, temp) + child.getDis(); if (tempRs == -1 || dis < tempRs) { tempRs = dis; path_temp = child.getPath(); } } if (path_temp != null) rs.getPath().addAll(path_temp); if (tempRs != -1) rs.setDis(tempRs); cache.put(key, rs); return rs; } } public Data getData() { return data; } public void setData(Data data) { this.data = data; } public Path getShort(String a, String b) { Node nodeA = data.getNodes().get(a); Node nodeB = data.getNodes().get(b); Path p = getShortDis(nodeA, nodeB, new HashSet<Node>()); return p; } public String[] getOneLine(int linename) { String[][] line=data.getLine(); String[] oneLine=new String[line[linename-1].length]; for(int i = 0;i<line[linename-1].length;i++) { oneLine[i]=line[linename-1][i]; } return oneLine; } }
这个算法是通过网上资源学习的,觉得他写得很不错,虽然要实现本次项目最短路径算法还要进行修改,但是这个算法还能计算距离,我觉得这样不仅能完成需求,还可以在此基础上增加新的内容,也就是在进行最短路径计算时还可以加上每两个站点间的距离权值,这也是为什么txt文件中设计了距离的属性。
4.测试
路线输出功能:
最短路径功能:
四.体会:
学会建立项目、编写markdown文件、使用Git 推送代码。
构思地铁线路问题,将其抽象为基于图的运算。设计主要功能模块。
学习了最短路径的算法,收益颇多。
就这一项目,就发现了自己还有还有很多不会的java编写方法,还要继续学习。
原文地址:https://www.cnblogs.com/wetrack/p/11672906.html
- 剑指offer代码解析——面试题19二叉树的镜像
- mysql高可用架构设计,处理高并发,大流量!
- 零基础入门深度学习 | 第三章:神经网络和反向传播算法
- 微信企业付款到个人钱包引发的坑之反思~!
- Intellij idea创建javaWeb以及Servlet简单实现
- 设计模式之代理模式之读写分离!!!
- Phantomjs+Nodejs+Mysql数据抓取(1.数据抓取)
- Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)
- 深入浅出Redis-redis底层数据结构(上)
- Linux下自动化监控内存、存储空间!
- 深入浅出Redis-redis底层数据结构(下)
- Spring-boot:快速搭建微框架服务
- Mysql重要参数说明
- 深入Java虚拟机--判断对象存活状态
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SSH端口转发
- 文本处理三剑客之—awk
- Python办公自动化|批量提取Excel数据
- 3分钟短文 | 有挑战!PHP用1个函数实现post请求,你用哪个?
- linux 磁盘管理
- linux 安装各个版本nodejs
- python3 使用cookie模拟post实现修改活码内容
- VIM 创建程序文件自动添加头部注释
- 【简记】Linux 计划任务 Crontab
- VS Code 免密登录Linux服务器
- Linux部署私钥实现免密登录
- 搭建Jenkins+tomcat+maven+Gitlab持续部署/回滚系统
- Java--注解
- 如何在 Ubuntu 20.04 上安装 Jenkins
- 在 Linux 下如何检查内存使用率