我通过三个函数 完成了这个功能

首先  创建哈希表 根据起始站名 终点站名

然后 根据哈希表 建立起 邻接表‘

最后 根据迪杰斯特拉算法 完成这个功能

 /**
* function:起终查询
*/
// 构建邻接表
public static Map<String, Map<String, Integer>> buildAdjacencyList() {
Connection connection = JDBCUtils.getConn();
Map<String, Map<String, Integer>> adjacencyList = new HashMap<>(); try {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT Starting_Station, Terminus_Station FROM station"); while (resultSet.next()) { String startingStation = resultSet.getString("Starting_Station");
String terminusStation = resultSet.getString("Terminus_Station"); addConnection(adjacencyList, startingStation, terminusStation);
addConnection(adjacencyList, terminusStation, startingStation);
} resultSet.close();
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
// 适当处理 SQLException
} return adjacencyList;
} // 将连接添加到邻接表
private static void addConnection(Map<String, Map<String, Integer>> adjacencyList, String source, String destination) {
if (!adjacencyList.containsKey(source))
{
adjacencyList.put(source, new HashMap<>());
}
adjacencyList.get(source).put(destination, 1);
} //根据 buildAdjacencyList()函数 求邻接表 最短路径
public static List<String> shortest(User user) {
String startingStation = user.getStarting_Station();
String terminusStation = user.getTerminus_Station(); Map<String, Map<String, Integer>> adjacencyList = buildAdjacencyList();
Map<String, Integer> distance = new HashMap<>();
Map<String, String> previous = new HashMap<>();
PriorityQueue<String> queue = new PriorityQueue<>(Comparator.comparingInt(distance::get)); for (String station : adjacencyList.keySet()) {
distance.put(station, Integer.MAX_VALUE);
previous.put(station, null);
} distance.put(startingStation, 0);
queue.add(startingStation); while (!queue.isEmpty()) {
String currentStation = queue.poll();
if (currentStation.equals(terminusStation)) {
break; // Found shortest path to terminus station
} Map<String, Integer> neighbors = adjacencyList.get(currentStation);
if (neighbors != null) {
for (String neighbor : neighbors.keySet()) {
int alt = distance.get(currentStation) + neighbors.get(neighbor);
if (alt < distance.get(neighbor)) {
distance.put(neighbor, alt);
previous.put(neighbor, currentStation);
queue.add(neighbor);
}
}
}
} // Reconstruct shortest path
List<String> shortestPath = new ArrayList<>();
String current = terminusStation;
while (previous.get(current) != null) {
shortestPath.add(current);
current = previous.get(current);
}
shortestPath.add(startingStation);
Collections.reverse(shortestPath); System.out.println(shortestPath); return shortestPath; }

安卓app 地铁最短路径查询 完成的更多相关文章

  1. 仿春雨医生 安卓app(android)

    仿春雨医生 安卓app(android) 目前APP处与开发完善中,可过程序自下载更新,如有BUG报错,请联系QQ 131 065 1206 支持安卓(android) .IOS(IPHONE),PA ...

  2. html+css+js+Hbuilder开发一款安卓APP,根本不用学Android开发!

    我们知道,要做一款安卓APP,咱们得先学安卓开发语言,例如java,前端后端.那么没有这些开发语言基础,咱们怎么做呢?其实现在有比较好的开发方案就是做webAPP,咱们可以用web前端知识构建安卓客户 ...

  3. 安卓APP承载网页(WebView)

    安卓APP自身如何打开网页,如何制作一个简单的浏览器,WebView在其中将是一个重要的角色.WebView是一个基于WebKit引擎.展现Web页面的控件. Webview 是一个基于webkit引 ...

  4. 关于安卓APP的启动界面

    刚学安卓App开发的朋友们,可能会遇到一个问题,就是人家的App刚进入会有一个页面出现一会儿后消失,   这个页面可以用来打广告,也可以声明App的主题,所以说这个启动页面至关重要,接下来,我把我的代 ...

  5. 安卓APP测试验证点总结

    最近较懒,加之闺女出生后记忆没完全恢复,总是忘东忘西,关于安卓APP测试的验证点还是总结一下,方便设计测试用例时查阅,也给各位博友参考! 1.除APP的正常功能点外,还有以下验证点: 安装/卸载(考虑 ...

  6. 【转载】安卓APP架构

    注:本篇博文转载于 http://my.oschina.net/mengshuai/blog/541314?fromerr=z8tDxWUH 本文介绍了文章作者从事了几年android应用的开发,经历 ...

  7. 安卓app设计规范整理和Android APP设计篇(转)

    随着安卓智能手机不停的更新换代.安卓手机系统越来越完美,屏幕尺寸也越来越大啦!比如最近小米的miui 6的发布和魅族手机系统的更新等等. 以小米MIUI6的安卓手机来说,MIUI6进行了全新设计,坚持 ...

  8. 安卓APP测试之使用Burp Suite实现HTTPS抓包方法

    APP的测试重点小部分在APP本身,大部分还是在网络通信上(单机版除外).所以在安卓APP测试过程中,网络抓包非常重要,一般来说,app开发会采用HTTP协议.Websocket.socket协议,一 ...

  9. 如何做个简单安卓App流程

    有同学做毕业设计,问怎样做个简单安卓App流程,我是做服务端的,也算是经常接触app,想着做app应该很简单吧,不就做个页面,会跳转,有数据不就行了,我解释了半天,人家始终没听懂,算了,我第二天问了下 ...

  10. 安卓App流量统计

    http://keepcleargas.bitbucket.org/2013/10/12/android-App-Traffic.html 安卓App流量统计 12 OCT 2013 android流 ...

随机推荐

  1. 我们为什么要做 SoloPi

    SoloPi现状 去年(2019年)7月份,蚂蚁集团正式对外开源了客户端自动化测试工具 SoloPi ,其主要包括三大模块:录制回放(用于功能测试).性能工具(用于性能测试)以及一机多控(服务于兼容性 ...

  2. WPF 已知问题 开启 IsManipulationEnabled 之后触摸长按 RepeatButton 不会触发连续的 Click 事件

    本文记录 WPF 的一个已知问题,在 RepeatButton 上开启 IsManipulationEnabled 漫游支持之后,将会导致触摸长按到 RepeatButton 之上时,不会收到源源不断 ...

  3. dotnet 6 使用 File.Exists 判断管道是否存在将让下次连接失败

    我尝试在 dotnet 6 使用 File.Exists 判断管道是否存在,如果管道存在再进行连接.然而这个逻辑将会接下来的 NamedPipeClientStream 调用 Connect 连接失败 ...

  4. 2019-10-31-WPF-设置纯软件渲染

    title author date CreateTime categories WPF 设置纯软件渲染 lindexi 2019-10-31 8:59:2 +0800 2018-04-20 16:36 ...

  5. LabView中使用VISA设备清零时,会发送00

    最近有为小伙伴跟我说他使用串口的时候通信遇到了问题,我看到他的在程序循环中使用了VISA设备清零控件,出于好奇我就复现了一下,发现每次调用VISA设备清零控件的时候,会主动向串口中发送00数据 一.测 ...

  6. C语言程序设计-笔记8-结构

    C语言程序设计-笔记8-结构 例9-1  输出平均分最高的学生信息.根据学生的基本信息包括学号.姓名.三门课程成绩以及个人平均成绩.输入n个学生的成绩信息,计算并输出平均分最高的学生信息. #incl ...

  7. [Python急救站]人脸识别技术练习

    这段时间做了一个用于初学者学习人脸识别系统的程序,在上代码时,先给说说事前准备: 首先我们需要一个OpenCV的一个haarcascade_frontalface_default.xml文件,只要去G ...

  8. Python数据分析 DataFrame 笔记

    08,DataFrame创建 DataFrame是一个[表格型]的数据结构,可以看做是[由Series组成的字典](共用同一个索引).DataFrame由按一定顺序排列的多列数据组成.设计初衷是将Se ...

  9. Golang重复Rails Devise gem密码加密

    https://github.com/haimait/go-devise-encryptor package main import ( "fmt" //devisecrypto ...

  10. 鸿蒙stage模型

    app.json5全局的配置文件 icon和label是应用列表的 module.json5模块配置文件 中有一个abilities其中的icon和label才是桌面的图标和名称 日志的话就是hail ...