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

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单源最短路径问题_单源最短路径-贪心算法相关推荐

  1. java单书号表示什么_单书号和双书号有何区别?

    单书号和双书号有何区别? 期刊目录网2017-09-29 17:51关注() 书号即ISBN,最直观的就是书的封底的条型码和那一串数字.是由中华人民共和国新闻出版总署分配给各个出版社的.国内的书号还在 ...

  2. java单链表节点翻转_单链表Java实现

    ​ 链表中的结点是以结点来表示,单链表每一个结点有一个指针域和data域,物理位置不是连续的,逻辑上是连续的. 代码实现 class LinkedList<E> {private Node ...

  3. java中arraycopy的用法_[jdk源码阅读系列]Java中System.arraycopy()的用法

    本文转载,原文链接: 3分钟了解Java中System.arraycopy的用法 - 伊万夫斯基 - 博客园  https://www.cnblogs.com/benjieqiang/p/114288 ...

  4. 单曲循环 翻译_“单曲循环”用英语怎么说?

    展开全部 单曲循环的英语是:Single tune circulation. 1.single单曲的意思. 2.tune,发音:英[tju:n],美[tu:n]. 释义:曲调,曲子; 和谐,调谐; 语 ...

  5. 单曲循环 翻译_“单曲循环” 用哪个词?

    本集节目内容简介 本集节目的问题来自一位姓闫的网友.她想知道应该用哪一个词语来表示 "单曲循环" 比较合适,是 "loop.repeat" 还是 "r ...

  6. 单曲循环 翻译_单曲循环是什么意思

    1. 已经单曲循环这首歌几个小时了. How Could This Be? You Not There With Me. 2. 播放模式也比较完善,有单曲,顺序,循环,随机播放等模式. It has ...

  7. 单曲循环 翻译_单曲循环。用英语怎么说?

    展开全部 单曲循环的英语是:Single tune circulation. 词组解析 在英语中,单曲循环的英语被翻译为 Single tune circulation,为固定搭配.其中single为 ...

  8. 用java编写弹弹堂的游戏_游戏源码仿弹弹堂端游服务端_手工弹弹堂游戏客户端_GM管理后台_附安裝构建实例教程...

    系统centos 7.2 64位 安装宝塔 yum install -y wget && wget -O install.shhttp://download.bt.cn/install ...

  9. 用java代码取网名_【源码教程】iapp获取QQ昵称

    新建 module.mjava 界面:/* * 获取QQ昵称 * @Param qq QQ号码 */String getNick(String qq){ // 获取QQ昵称 if(sss(" ...

最新文章

  1. Python 数据分析包:pandas 基础
  2. python-day01
  3. 【python】并行化的又一种思路
  4. 详解STL中的空间配置器(SGI版本)
  5. 从零开始编写深度学习库(五)ConvolutionLayer CPU编写
  6. ndows定时任务_百度经验,windows服务器:编写bat脚本,创建定时任务
  7. 与 HarmonyOS 拼速度?谷歌正式推出 Fuchsia OS!
  8. CentOS7中rpm,yum软件安装命令
  9. python shell清屏指令_Python Shell 怎样清屏?
  10. win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
  11. 关系数据库的三大范式以及BCNF范式
  12. mysql数据库myd文件丢失怎么_mysql数据库的恢复(frm、Myd、MyI文件仍存在)
  13. 股票收益率与现金分红行为之间的关系,及半强制分红政策评价
  14. 第一章 Caché JSON 简介
  15. setoolkit克隆网站并抓取账号密码
  16. hadoop2.7.2下载
  17. VS code之代码格式化快捷键
  18. 分组密码算法与DES算法
  19. Redis的穿透、击穿、雪崩问题
  20. 苹果手机怎么设置铃声?不用电脑,轻松搞定

热门文章

  1. linux bin目录误删,Linux下误删 /user/bin目录后的补救
  2. 透明怎么弄_最新版微信如何设置透明背景?这样设置,效果令人惊喜
  3. tortoise清理本地分支_本地:延庆运污水环卫抽化粪池
  4. 在VC中使用MATLAB C++函数库
  5. VS2010发布、打包安装程序超全超详细
  6. python饼状图教程_Python数据可视化:饼状图的实例讲解
  7. python命令行参数作用_Python命令行参数解析模块argparse
  8. 全字符微信名 php,PHP方法处理微信昵称特殊符号过滤
  9. 前端使用linux命令更新项目生产包与测试包命令
  10. 华三ospf联动bfd_HCIE2020__路由交换专家__BFD综合实验