安卓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流 ...
随机推荐
- 基于Serverless的云原生转型实践
简介: 新一代的技术架构是什么?如何变革?是很多互联网企业面临的问题.而云原生架构则是这个问题最好的答案,因为云原生架构对云计算服务方式与互联网架构进行整体性升级,深刻改变着整个商业世界的 IT 根基 ...
- Dataphin产品核心功能大图(六)发布中心:生产和开发隔离模式下的保护伞
简介:Dataphin,用中台方法论打造企业级好数据.Dataphin是阿里巴巴集团OneData数据治理方法论内部实践的云化输出,一站式提供数据采.建.管.用全生命周期的大数据能力,以助力企业显著 ...
- [Pholcus] Go项目 Pholcus 编写静态规则文件, 0 到 1
1. 初始化项目包,go mod init [module-path] 比如:go mod init github.com/abc/efg 2. 新建一个目录放置我们编写的规则 go 文件. 3. m ...
- [PHP] 浅谈 Laravel Scout 的存在意义
注:Laravel Scout 是官方支持的对框架模型数据进行全文检索功能的扩展包. Laravel 的 Scout 与 Eloquent ORM 进行了深度集成,不用开发者再自己进行代码侵入了. L ...
- 通过Ingress-nginx实现灰度发布---灰度发布(22)
1.通过Ingress-nginx实现灰度发布 场景一: 将新版本灰度给部分用户 假设线上运行了一套对外提供 7 层服务的 Service A 服务,后来开发了个新版本 Service A' 想 要上 ...
- 路由跳转报错:Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicated",...
记录一个路由跳转的报错: 将换成
- Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目
Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目 每博一文案 有句谚语说:"一怒之下踢石头,只有痛着脚趾头." 比一件糟糕的事情更可拍的,是你用糟糕的态度 ...
- 四:大数据架构回顾-IOTA架构
IOTA大数据架构是一种基于AI生态下的全新的数据架构模式,2018年,易观首次提出这一概念.IOTA的整体思路是设定标准数据模型,通过边缘计算技术把所有的计算过程分散在数据产生.计算和查询过程当中, ...
- installshield 安装jdk并配置环境变量
今天来通过installshield安装jdk以及配置环境变量,本质上是调用第三方安装程序. 首先将jdk的安装文件添加到我们的安装程序中 然后编写我们的脚本 选择BEHAVIOR AND LOGIC ...
- 说一下flex的属性
flex-grow项目的放大比例,默认为0,即如果存在剩余空间,也不放大. flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小.负值对该属性无效. flex-bas ...