package com.atguigu.十大程序员算法;
import java.util.Arrays;public class Dijkstra {public static void main(String[] args) {char[] veritex={'A','B','C','D','E','F','G'};//邻接矩阵int[][] matrix=new int[veritex.length][veritex.length];final int N=65535;matrix[0]=new int[]{N,5,7,N,N,N,2};matrix[1]=new int[]{5,N,N,9,N,N,3};matrix[2]=new int[]{7,N,N,N,8,N,N};matrix[3]=new int[]{N,9,N,N,N,4,N};matrix[4]=new int[]{N,N,8,N,N,5,4};matrix[5]=new int[]{N,N,N,4,5,N,6};matrix[6]=new int[]{2,3,N,N,4,6,N};ZGraph graph = new ZGraph(veritex, matrix);graph.showGraph();graph.dsj(6);graph.showDijkstra();}
}
class VisitedVertex{//记录各个顶点是否访问过,1表示访问过,0表示未访问过,会动态更新public int[] already_arr;//每个下标对应的值为前一个顶点的下标,会动态更新public int[] pre_visited;//记录出发点到其他所有顶点的距离,比如G为出发点,就会记录G到其他顶点的距离,会动态更新,求最短距离就会存放到dispublic int[] dis;/**** @param length:表示顶点个数* @param index:出发顶点对应的下标*/public VisitedVertex(int length,int index) {this.already_arr=new int[length];this.pre_visited=new int[length];this.dis=new int[length];//初始化dis数组Arrays.fill(dis,65535);this.already_arr[index]=1;//设置出发顶点被访问过this.dis[index]=0;//设置出发顶点的访问距离为0}/*** 功能:判断index顶点是否被访问过* @param index* @return:如果访问过,就返回true,否则就返回false*/public boolean in(int index){if (already_arr[index]==1){return false;}return true;}/*** 功能:更新出发顶点到index顶点的距离* @param index* @param len*/public void updateDis(int index,int len){dis[index]=len;}/*** 功能:更新顶点的前驱为index结点* @param pre* @param index*/public void updatePre(int pre,int index){pre_visited[pre]=index;}/*** 功能:返回出发顶点到index顶点的距离* @param index*/public int getDis(int index){return dis[index];}//继续选择并返回新的访问顶点public int updateArr(){int min=6535 ,index=0;for (int i = 0; i <already_arr.length ; i++) {if (already_arr[i]==0 && dis[i]<min){min=dis[i];index=i;}}//更新index被访问过already_arr[index]=1;return index;}//显示最后结果//即将三个数组的情况输出public void show(){System.out.println("==================================");//输出already_arrfor (int i :already_arr) {System.out.print(i+"  ");}System.out.println();//输出前驱顶点for (int i :pre_visited) {System.out.print(i+"  ");}System.out.println();//输出dis数组\for (int i :dis) {System.out.print(i+"  ");}}}
class ZGraph{private char[] vertex;//顶点数组private int[][] matrix;//邻接矩阵private VisitedVertex vv;//已经访问顶点集合//构造器public ZGraph(char[] vertex, int[][] matrix) {this.vertex = vertex;this.matrix = matrix;}//显示结果public void showDijkstra(){vv.show();}//显示图的方法public void showGraph(){for (int[] Link:matrix) {System.out.println(Arrays.toString(Link));}}//迪杰斯特拉算法实现public void dsj(int index){vv = new VisitedVertex(vertex.length, index);update(index);//更新下标index顶点到周围顶点距离和前驱顶点for (int i = 1; i <vertex.length ; i++) {index=vv.updateArr();//选择并返回新的访问顶点update(index);}}//更新index下标顶点到周围顶点的距离和周围顶点的前驱顶点private void update(int index){int len=0;//根据遍历我们的邻接矩阵的matrix[index]for (int j = 0; j < matrix[index].length; j++) {//len含义出发顶点到index顶点的距离加上从index顶点到i顶点的len=vv.getDis(index)+matrix[index][j];//如果i这个顶点没用被访问过,并且len小于出发顶点到i顶点的距离,就需要更新if (vv.in(j)&&len<vv.getDis(j)){vv.updatePre(j,index);//更新i这个顶点的前驱为index顶点vv.updateDis(j,len);//更新出发顶点到i的距离}}}
}

Java实现迪杰斯特拉算法相关推荐

  1. 【Java】迪杰斯特拉算法

    Dijkstra's algorithm 迪杰斯特拉算法,也名迪克斯特拉算法,用以解决有向带权图的最佳路径问题. 注意:图中不可有负权!否则不可使用此算法! 本实现用到的数据结构有三. 有向带权图gr ...

  2. java迪杰斯特拉算法介绍_178-迪杰斯特拉(Dijkstra)算法基本介绍

    2.网上数据结构和算法的课程不少,但存在两个问题: 1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了 2) ...

  3. java迪杰斯特拉算法_迪杰斯特拉算法完整代码(Java)

    package com.rao.graph; import java.util.*; /** * @author Srao * @className Dijkstra * @date 2019/12/ ...

  4. java实现迪杰斯特拉(Dijkstra)算法求解最短路问题

    迪杰斯特拉(Dijkstra)算法是由荷兰计算机科学家狄克斯特拉于1959年提出的.是寻找从一个顶点到其余各顶点的最短路径算法,可用来解决最短路径问题. 迪杰斯特拉算法采用贪心算法的策略,将所有顶点分 ...

  5. java迪杰斯特拉算法实例,Java 图的最短路径dijstra(迪杰斯特拉)算法和拓扑排序

    一.图的最短路径从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径叫做最短路径 图的最短路径有许多重要的应用. 例如:上图中v0-v8有9个点,可以看做不同的地点,现在要规 ...

  6. Java 图的最短路径问题-迪杰斯特拉算法VS弗洛伊德算法

    1.迪杰斯特拉算法VS弗洛伊德算法 迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径: 弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一 ...

  7. 迪杰斯特拉算法(最短路径)

    描述 算法过程 代码实现 package com.atguigu.dijkstra;import com.sun.xml.internal.fastinfoset.algorithm.BooleanE ...

  8. 迪杰斯特拉算法 两点间最短路径的选择

    百度首页 登录 注册 新闻网页贴吧知道音乐图片视频地图百科文库 首页 分类 艺术 科学 自然 文化 地理 生活 社会 人物 经济 体育 历史 特色百科 历史上的今天 数字博物馆 史记·2015 城市百 ...

  9. 迪杰斯特拉c++_常用十大算法之 其九·迪杰斯特拉算法【日后详细补充】

    介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 问题-最短路径 ...

最新文章

  1. 使用CSS更改HTML5输入的占位符颜色
  2. STM32F103--(二) GPIO实践
  3. 20170721L08-02-02老男孩Linux运维实战培训初级第八节课课前【上机实战】考试讲解...
  4. MySQL行锁 表锁理解
  5. IPython高级用法(一)定制命令别名及存储别名
  6. 自动化测试--实现一套完全解耦的简单测试框架(二)
  7. think php上传图片,基于ThinkPHP5.0实现图片上传插件
  8. Java JDK 源码结构
  9. 深入理解Dalvik字节码指令及Smali文件
  10. WOMic 使用wifi 将手机作为电脑麦克风音频输入
  11. TFT-ST7789 方向调整
  12. 关于ORACLE删除分区
  13. 网站使用CDN有什么优势?
  14. 利用Excel绘制超好看的直方图与正态分布曲线
  15. 苹果授权登录,后端校验(Sign in with Apple)
  16. 万豪国际成立全球清洁卫生委员会,推行更高标准清洁消毒措施
  17. 行业深耕、教育赋能,讯众股份BPO 华北区Q4启动大会成功召开
  18. 2020 第三届安洵杯 MISC Writeup
  19. Android事件分发浅谈
  20. 这个是可以将得到速查编码的存储过程 如 中国人 可以得到 ZGR

热门文章

  1. 计算机一级无法打开office,电脑中无法运行Office2016的两种解决方法
  2. 【移动网络】Ch. 1 5G标准化与频谱
  3. GPON ITU-T G.xxx 标准协议下载
  4. c语言模拟计算机指令流程图,家居分布式温度监测报警系统-传感器课程设计报告 带程序及仿真全套资料...
  5. (1)我们的代码被 “送进城里 ” 后发生了什么 ^o^ —— 「进程」篇
  6. Stm32MP157-Linux(Ubuntu)——Ubuntu入门
  7. 晚清时真正的武林高手在这儿?
  8. 软件测试之微软学术搜索(Microsoft Academic Search)
  9. 13位巴克码二相相位编码模糊图
  10. pandas如何合并列表_Pandas数据合并与拼接的5种方法