用java单源最短路径问题_单源最短路径-贪心算法

单源最短路径,关于这个问题的贪心算有点不好理解,分析后续补充,代码也需要后续优化,便于理解

package test;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* Created by saishangmingzhu on 2018/12/3.

* 单源最短路径

*/

public class SingleSourceShortestPath {

public static void main(String[] arg) {

new SingleSourceShortestPath().greedy();

}

/**

* 贪心算法

*/

public void greedy(){

//【1】创建有向图

List pointList=new ArrayList<>();

pointList.add(new Point("A",0));

pointList.add(new Point("B",1));

pointList.add(new Point("C",2));

pointList.add(new Point("D",3));

pointList.add(new Point("E",4));

Map pathMap=new HashMap<>();

pathMap.put("AB",10);

pathMap.put("AD",30);

pathMap.put("AE",100);

pathMap.put("BC",50);

pathMap.put("CE",10);

pathMap.put("DC",20);

pathMap.put("DE",60);

//【2】从源顶点计算距离

// 源顶点为A

int[] dist=new int[pointList.size()];

for (int i=1;i

dist[i]=Integer.MAX_VALUE;

}

List resultList=new ArrayList<>();

Point first=pointList.get(0);

pointList.remove(0);

while (pointList.size()>0){

int min=10000;

Point minP=null;

for (int i=0;i

Point p = pointList.get(i);

String key = first.getName() + p.getName();

if (pathMap.containsKey(key)) {

int v = pathMap.get(key);

if (dist[p.getIndex()] > v + dist[first.getIndex()]) {

dist[p.getIndex()] = v + dist[first.getIndex()];

if (min>v + dist[first.getIndex()]){

min=v + dist[first.getIndex()];

minP=p;

}

}

}

else {

if (min>dist[p.getIndex()]){

min=dist[p.getIndex()];

minP=p;

}

}

}

resultList.add(minP);

pointList.remove(minP);

first=minP;

}

for (int i:dist)

System.out.println(i);

}

}

class Point{

String name;

int index;

public Point(String name, int index) {

this.name = name;

this.index = index;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getIndex() {

return index;

}

public void setIndex(int index) {

this.index = index;

}

}

©著作权归作者所有:来自51CTO博客作者塞上名猪的原创作品,如需转载,请注明出处,否则将追究法律责任

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

APPLE STORE

直接在设置中&#xff0c;使用查看APPLE ID是无法更改的&#xff0c;现在必须要有所在区域的信用卡信息&#xff0c;支付方式无法像以前一样选择“无”。 查询后发现&#xff0c;有人说icloud3.0,即这个旧版的可以进行更改&#xff0c;于是下载。 但发现一个问题&#xff0c;输…

vue项目打包后文本溢出代码消失问题

补充 https://www.cnblogs.com/richard1015/p/8526988.html vue webpack 打包编译-webkit-box-orient: vertical 后消失 解决方案 optimize-css-assets-webpack-plugin这个插件的问题 注释掉webpack.prod.conf.js中下面的代码 new OptimizeCSSPlugin({cssProcessorOptions: c…

前端图片canvas,file,blob,DataURL等格式转换

最近用到一些图片相关的操作&#xff0c;记录一下笔记。 将file转化成base64 场景&#xff1a; 获取到一个file类型的图片&#xff0c;如果直接在html中预览&#xff1f;这里就是利用html5的新特性&#xff0c;将图片转换为Base64的形式显示出来。有两种方法&#xff1a; 方法…

java创建异步多线程_Java创建多线程异步执行实现代码解析

实现Runable接口通过实现Runable接口中的run()方法public class ThreadTest implements Runnable {public static void main(String[] args) {Thread thread new Thread(new ThreadTest());thread.start();}Overridepublic void run() {System.out.println("Runable 方式…

Java中的状态设计模式–示例教程

状态模式是行为设计模式之一 。 当对象根据其内部状态更改其行为时&#xff0c;将使用状态设计模式。 如果必须根据对象的状态更改其行为&#xff0c;则可以在对象中使用状态变量&#xff0c;并使用if-else条件块根据状态执行不同的操作。 状态模式用于通过上下文和状态实现提…

JS 循环遍历 总结

一、循环遍历语句 for...in... &#xff08;ES5&#xff09; 语法&#xff1a;javascript for(keys in obj){}适用&#xff1a;遍历对象说明&#xff1a;   1.keys表示obj对象的每一个键值对的键(键名)&#xff0c;所有循环中&#xff0c;需要使用obj[keys]来取到每一个值。 …

java之平台无关

java虚拟机是执行字节码文件&#xff08;.class&#xff09;的虚拟机进程。 java源程序&#xff08;.java&#xff09;被编译器编译成------>字节码文件&#xff08;.class&#xff09;,然后字节码文件&#xff0c;将由java虚拟机&#xff0c;解释成------>机器码&#x…

适用于ActiveMQ 5.9的Apache Camel Broker组件

将Apache Camel嵌入ActiveMQ代理可以为使用Camel的集成功能扩展消息代理提供极大的灵活性。 Apache Camel路由的另一个好处是&#xff0c;如果使用activemq组件 &#xff0c;则可以避免远程连接到ActiveMQ的序列化和网络开销。 关于Apache ActiveMQ真正伟大的事情之一是&#x…

java rpg对战_RpgGame.java

import java.util.Scanner;public class RpgGame {public static void main(String[] args) {System.out.println("--------------------亲爱的勇士欢迎来到文字世界--------------------");System.out.println("--------------------这是一个充斥着危险的世界&…

hive基本操作与应用

通过hadoop上的hive完成WordCount 启动hadoop Hdfs上创建文件夹 上传文件至hdfs 启动Hive 创建原始文档表 导入文件内容到表docs并查看 用HQL进行词频统计&#xff0c;结果放在表word_count里 查看统计结果 转载于:https://www.cnblogs.com/cairuiqi/p/9048256.html

python - classs内置方法 solt

solt # __solt__ # 是一个类变量,变量值可以是列表、元组或者是可迭代对象,也可以是一个字符串 # (以为这所有实例只有一种数据属性) # # 作用:(为了节省内存空间,减少过多的实例属性所占用的内存空间) # 优点: # 1.使用_solt__以后,实例的__dict__属性被去除,从而达到节省…

如何优雅的链式取值之 MayBe 函子

本文基于 如何优雅地链式取值 可能有人之前看过我写的关于函数式编程的东西&#xff0c;也有人看过这一篇文章。由于我还是学生&#xff0c;开发经验相对较少&#xff0c;所以对于函数式编程如何应用存在一些疑惑。之前也问过面试官&#xff0c;说是实际开发中用的比较少&#…

Jackson中的自定义反序列化器和验证

tl; dr&#xff1a;将输入验证添加到Jackson中的自定义json解串器很重要。 在RHQ中&#xff0c;我们在几个地方使用了Json解析-直接在as7 / Wildfly插件中&#xff0c;或者通过RESTEasy 2.3.5间接在REST-api中使用&#xff0c;已经很繁重了。 现在&#xff0c;我们有一个bean…

java ssh shell命令_java 通过ssh 执行命令

java 里面的开源 ssh libjsch 例子JSch jSch new JSch();//设置JSch 的日志&#xff0c;可以看到具体日志信息JSch.setLogger(new Logger() {Overridepublic boolean isEnabled(int level) {return true;}Overridepublic void log(int level, String message) {System.out.pri…

标准易语言学习

1、窗口程序加入自定义局部变量 按CTRLL弹出局部变量表&#xff08;或点菜单栏上的插入&#xff0c;选择局部变量&#xff09;转载于:https://www.cnblogs.com/slyzly/articles/9048724.html

c# TCP高性能通信

开篇都是吹牛逼哈。。。 我原本打算使用dotnetty来解决传输问题&#xff0c;但是试了下没有成功&#xff0c;也没有找到相关问题解决方法&#xff0c;导出源码&#xff0c;好大啊。暂时不想研究&#xff0c;而且是.Net Core的。最后没有办法&#xff0c;就自己封装了。我就不上…

vue项目中keep-alive的使用,从详情页返回列表时保存浏览位置

背景描述&#xff1a; 最近在做移动端前端项目中&#xff0c;需要实现以下场景&#xff1a; 1.在页面查询列表&#xff0c;进入详情页时&#xff0c;返回需要页面返回到上次浏览的位置 2.由于查询列表获取的数据可能会短时间改变&#xff0c;如果前端长时间缓存数据&#xf…

Apache log4j是领先的日志记录框架

根据 从零周转开始的调查中&#xff0c; Apache log4j是领先的Java日志记录框架。 这实际上是一个非常有趣的调查。 它显示SLF4J最常用作伐木外墙&#xff0c;占61&#xff05;。 但是&#xff0c;它似乎最常与Apache Log4j一起使用&#xff0c;52&#xff05;的调查参与者都…

Centos6.8通过yum安装mysql5.7

Centos6.8通过yum安装mysql5.7 2017年07月13日 14:19:10 阅读数&#xff1a;1067 1.安装mysql的yum源 a.下载配置mysql的yum源的rpm包 根据上面3张图片中的操作下载下来的rpm文件可以通过如下命令获取&#xff1a; wget https://dev.mysql.com/get/mysql57-community-release-e…

codeforces Labyrinth

codeforces Labyrinth Time Limit: 2 Sec   Memory Limit: 512 MB Description You are playing some computer game. One of its levels puts you in a maze consisting of n lines, each of which contains m cells. Each cell either is free or is occupied by an obstac…