安卓app 地铁最短路径查询 完成

我通过三个函数 完成了这个功能
首先 创建哈希表 根据起始站名 终点站名
然后 根据哈希表 建立起 邻接表‘
最后 根据迪杰斯特拉算法 完成这个功能
/**
* 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 地铁最短路径查询 完成的更多相关文章
- 仿春雨医生 安卓app(android)
仿春雨医生 安卓app(android) 目前APP处与开发完善中,可过程序自下载更新,如有BUG报错,请联系QQ 131 065 1206 支持安卓(android) .IOS(IPHONE),PA ...
- html+css+js+Hbuilder开发一款安卓APP,根本不用学Android开发!
我们知道,要做一款安卓APP,咱们得先学安卓开发语言,例如java,前端后端.那么没有这些开发语言基础,咱们怎么做呢?其实现在有比较好的开发方案就是做webAPP,咱们可以用web前端知识构建安卓客户 ...
- 安卓APP承载网页(WebView)
安卓APP自身如何打开网页,如何制作一个简单的浏览器,WebView在其中将是一个重要的角色.WebView是一个基于WebKit引擎.展现Web页面的控件. Webview 是一个基于webkit引 ...
- 关于安卓APP的启动界面
刚学安卓App开发的朋友们,可能会遇到一个问题,就是人家的App刚进入会有一个页面出现一会儿后消失, 这个页面可以用来打广告,也可以声明App的主题,所以说这个启动页面至关重要,接下来,我把我的代 ...
- 安卓APP测试验证点总结
最近较懒,加之闺女出生后记忆没完全恢复,总是忘东忘西,关于安卓APP测试的验证点还是总结一下,方便设计测试用例时查阅,也给各位博友参考! 1.除APP的正常功能点外,还有以下验证点: 安装/卸载(考虑 ...
- 【转载】安卓APP架构
注:本篇博文转载于 http://my.oschina.net/mengshuai/blog/541314?fromerr=z8tDxWUH 本文介绍了文章作者从事了几年android应用的开发,经历 ...
- 安卓app设计规范整理和Android APP设计篇(转)
随着安卓智能手机不停的更新换代.安卓手机系统越来越完美,屏幕尺寸也越来越大啦!比如最近小米的miui 6的发布和魅族手机系统的更新等等. 以小米MIUI6的安卓手机来说,MIUI6进行了全新设计,坚持 ...
- 安卓APP测试之使用Burp Suite实现HTTPS抓包方法
APP的测试重点小部分在APP本身,大部分还是在网络通信上(单机版除外).所以在安卓APP测试过程中,网络抓包非常重要,一般来说,app开发会采用HTTP协议.Websocket.socket协议,一 ...
- 如何做个简单安卓App流程
有同学做毕业设计,问怎样做个简单安卓App流程,我是做服务端的,也算是经常接触app,想着做app应该很简单吧,不就做个页面,会跳转,有数据不就行了,我解释了半天,人家始终没听懂,算了,我第二天问了下 ...
- 安卓App流量统计
http://keepcleargas.bitbucket.org/2013/10/12/android-App-Traffic.html 安卓App流量统计 12 OCT 2013 android流 ...
随机推荐
- 内含干货PPT下载|一站式数据管理DMS及最新解决方案发布
简介: 今天主要给大家介绍一站式数据管理平台DMS以及解决方案的发布.议题包含企业数据管理当前的一些痛,DMS一站式数据管理平台以及其核心技术,实时数仓解决方案以及相应的应用实践. "数聚 ...
- 延迟绑定与retdlresolve
延迟绑定与retdlresolve 我们以前在ret2libc的时候,我们泄露的libc地址是通过延迟绑定实现的,我们知道,在调用libc里面的函数时候,它会先通过plt表和gor表绑定到,函数真实地 ...
- [FAQ] Docker查询出所有的停止容器并移除
$ docker rm `docker container ls -a --filter "status=exited" | awk '{print $1}' | sed '1,1 ...
- dotnet 读 WPF 源代码笔记 提升调试效率的 NamedObject 类型
本文来聊聊 WPF 那些值得称赞的设计中的 NamedObject 类型.在 WPF 中,有很多值得我学习的设计开发思想,其中就包括本文将要介绍的 NamedObject 类型.此类型的定义仅仅只是为 ...
- Docker镜像基本原理
前言 Docker系列文章: 如果没有安装过Docker请参考本文最后部分,大家从现在开始一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么学习Docker Docker基本概念 什 ...
- Spring Boot 编写 API 的 10条最佳实践
10 个最佳实践,让您像专业人士一样编写 Spring Boot API,并结合编码示例和解释: 1. RESTful API 设计原则: 清晰一致的资源命名:使用准确反映 API 管理的资源的名词( ...
- localstory,sessionstory,vuex,cook
函数式组件 1.特点 没有this(没有实例) 没有响应式数据 它只是一个接受一些 prop 的函数. render MVVM分为Model.View.ViewModel三者. Model:代表数据模 ...
- Oracle【ORA-00600 internal error code arguments [2662]】恢复一例
背景 1.数据库版本:11.2.0.4 2.未开启归档 3.没有备份:无RMAN备份.无DUMP备份 4.数据库redo log全部删除. 解决思路: Oracle 的隐含参数: _allow_res ...
- 在Linux下想要删除一个目录需要怎样的权限
场景一 在Home目录下创建一个目录dirtest,然后使用chmod 333 dirtest修改目录权限.这时候dirtest的权限为d-wx-wx-wx,如果执行rm -r dirtest可以进行 ...
- WEB服务与NGINX(8)-NGINX的长连接功能
1. 长连接配置 keepalive_timeout; 定义客户端保持连接超时时长,0表示禁止长连接,默认为65s,建议使用15s即可. 在ngx_http_upstream_module中也有此项设 ...