用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博客作者塞上名猪的原创作品,如需转载,请注明出处,否则将追究法律责任
用java单源最短路径问题_单源最短路径-贪心算法相关推荐
- java单书号表示什么_单书号和双书号有何区别?
单书号和双书号有何区别? 期刊目录网2017-09-29 17:51关注() 书号即ISBN,最直观的就是书的封底的条型码和那一串数字.是由中华人民共和国新闻出版总署分配给各个出版社的.国内的书号还在 ...
- java单链表节点翻转_单链表Java实现
链表中的结点是以结点来表示,单链表每一个结点有一个指针域和data域,物理位置不是连续的,逻辑上是连续的. 代码实现 class LinkedList<E> {private Node ...
- java中arraycopy的用法_[jdk源码阅读系列]Java中System.arraycopy()的用法
本文转载,原文链接: 3分钟了解Java中System.arraycopy的用法 - 伊万夫斯基 - 博客园 https://www.cnblogs.com/benjieqiang/p/114288 ...
- 单曲循环 翻译_“单曲循环”用英语怎么说?
展开全部 单曲循环的英语是:Single tune circulation. 1.single单曲的意思. 2.tune,发音:英[tju:n],美[tu:n]. 释义:曲调,曲子; 和谐,调谐; 语 ...
- 单曲循环 翻译_“单曲循环” 用哪个词?
本集节目内容简介 本集节目的问题来自一位姓闫的网友.她想知道应该用哪一个词语来表示 "单曲循环" 比较合适,是 "loop.repeat" 还是 "r ...
- 单曲循环 翻译_单曲循环是什么意思
1. 已经单曲循环这首歌几个小时了. How Could This Be? You Not There With Me. 2. 播放模式也比较完善,有单曲,顺序,循环,随机播放等模式. It has ...
- 单曲循环 翻译_单曲循环。用英语怎么说?
展开全部 单曲循环的英语是:Single tune circulation. 词组解析 在英语中,单曲循环的英语被翻译为 Single tune circulation,为固定搭配.其中single为 ...
- 用java编写弹弹堂的游戏_游戏源码仿弹弹堂端游服务端_手工弹弹堂游戏客户端_GM管理后台_附安裝构建实例教程...
系统centos 7.2 64位 安装宝塔 yum install -y wget && wget -O install.shhttp://download.bt.cn/install ...
- 用java代码取网名_【源码教程】iapp获取QQ昵称
新建 module.mjava 界面:/* * 获取QQ昵称 * @Param qq QQ号码 */String getNick(String qq){ // 获取QQ昵称 if(sss(" ...
最新文章
- Python 数据分析包:pandas 基础
- python-day01
- 【python】并行化的又一种思路
- 详解STL中的空间配置器(SGI版本)
- 从零开始编写深度学习库(五)ConvolutionLayer CPU编写
- ndows定时任务_百度经验,windows服务器:编写bat脚本,创建定时任务
- 与 HarmonyOS 拼速度?谷歌正式推出 Fuchsia OS!
- CentOS7中rpm,yum软件安装命令
- python shell清屏指令_Python Shell 怎样清屏?
- win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
- 关系数据库的三大范式以及BCNF范式
- mysql数据库myd文件丢失怎么_mysql数据库的恢复(frm、Myd、MyI文件仍存在)
- 股票收益率与现金分红行为之间的关系,及半强制分红政策评价
- 第一章 Caché JSON 简介
- setoolkit克隆网站并抓取账号密码
- hadoop2.7.2下载
- VS code之代码格式化快捷键
- 分组密码算法与DES算法
- Redis的穿透、击穿、雪崩问题
- 苹果手机怎么设置铃声?不用电脑,轻松搞定
热门文章
- linux bin目录误删,Linux下误删 /user/bin目录后的补救
- 透明怎么弄_最新版微信如何设置透明背景?这样设置,效果令人惊喜
- tortoise清理本地分支_本地:延庆运污水环卫抽化粪池
- 在VC中使用MATLAB C++函数库
- VS2010发布、打包安装程序超全超详细
- python饼状图教程_Python数据可视化:饼状图的实例讲解
- python命令行参数作用_Python命令行参数解析模块argparse
- 全字符微信名 php,PHP方法处理微信昵称特殊符号过滤
- 前端使用linux命令更新项目生产包与测试包命令
- 华三ospf联动bfd_HCIE2020__路由交换专家__BFD综合实验