介绍

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

算法过程

设置出发顶点为v,顶点集合V{v1,v1,vi…},v到V中各顶点的距离构成集合Dis,
Dis(d1,d2,di),Dis集合记录v到图中各顶点的距离(自身可以看作0,v到vi的距离对应di)
1、从Dis中选择值最小的di并移出Dis集合,同时移出V集合中对应的顶点vi,此时,v到vi即为最短路径
2、更新Dis集合,更新规则为:比较v到V集合中顶点的距离值,与v到vi到集合中顶点的距离值,保留值比较小的一个
3、重复执行这两个步骤,直到最短路径顶点为目标顶点即可结束。

最短路径的应用

有七个村庄(A,B,C,D,E,F,G),现在有六个邮差,从G点出发,需要分别送到A,B,C,D,E,F六个村庄,各个村庄的距离用边线表示(权),如何计算出G村庄到各个村庄的最短距离?如果从其他出发点到各个村庄的最短距离又是多少?

package algorithm;/*** @author taoke* @desc 迪杰斯特拉算法(最短路径问题)* @email 1504806660@qq.com* @date 2022/1/26*/
public class Dijkstra {//最大值private static final int N = 65535;//顶点private static final char[] vertex = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};//邻接矩阵private static final int[][] matrix = {{0, 5, 7, N, N, N, 2},{5, 0, N, 9, N, N, 3},{7, N, 0, N, 8, N, N},{N, 9, N, 0, N, 4, N},{N, N, 8, N, 0, 5, 4},{N, N, N, 4, 5, 0, 6},{2, 3, N, N, 4, 6, 0}};public static void main(String[] args) {//起点位置int start = 6;djs(start);show(start);}/*** 迪杰斯特拉算法** @param index 是*/public static void djs(int index) {for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix.length; j++) {if (matrix[index][i] + matrix[i][j] < matrix[index][j]) {matrix[index][j] = matrix[index][i] + matrix[i][j];}}}}/*** 打印结果** @param index 起点索引*/public static void show(int index) {System.out.println("最短路径:");for (int i = 0; i < matrix.length; i++) {System.out.print(vertex[index] + " -> " + vertex[i] + " = " + matrix[index][i] + "\n");}}}

常用的十大算法-迪杰斯特拉算法相关推荐

  1. [链接]最短路径的几种算法[迪杰斯特拉算法][Floyd算法]

    最短路径-Dijkstra算法和Floyd算法 http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算 ...

  2. Dijkstra算法 迪杰斯特拉算法 单源最短路径

    写在前边的话:你的支持是我写作的动力,有帮助到你的话麻烦点赞加收藏呦.感激不尽!如有错误也请留言指正. 考研数据结构练习,欢迎订阅我的专辑<考研数据结构题型分类讲解练习> [东南大学200 ...

  3. 常用算法(八)——迪杰斯特拉算法

    迪杰斯特拉算法 大纲目录 迪杰斯特拉算法 迪杰斯特拉算法 一.应用场景-最短路径问题 二.迪杰斯特拉(Dijkstra)算法介绍 三.迪杰斯特拉(Dijkstra)算法过程 四.源码 一.应用场景-最 ...

  4. c++ 遍历所有点且距离最短_图解:最短路径之迪杰斯特拉算法

    小禹禹们,你们好,景禹最近已经开学,忙着准备毕业答辩的事情,这才抽身个大家更新文章,还请莫怪.生活实属不易,有时候让人有点儿焦头烂额,甚至想让景禹放弃继续更新文章,可是千百号人默默地关注者景禹,当然也 ...

  5. 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)

    上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...

  6. 最短路径算法 迪杰斯特拉、佛洛依德和贝尔曼

    最短路径算法 迪杰斯特拉算法 佛洛依德算法 迪杰斯特拉算法 迪杰斯特拉算法用来解决在有向有权图中某一个点到任意一点的最短路径问题. 注意:只能用来解决权为非零的情况,不能够解决权为负数的情况 思想:我 ...

  7. 求有向图中两点最短距离java_Java 迪杰斯特拉算法实现查找最短距离

    迪杰斯特拉算法 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是 ...

  8. 迪杰斯特拉算法python实现

    回顾下最短路径的地杰斯特拉算法 迪杰斯特拉算法是求从某一个起点到其余所有结点的最短路径,是一对多的映射关系,是一种贪婪算法 示例: 算法实现流程思路: 迪杰斯特拉算法每次只找离起点最近的一个结点,并将 ...

  9. 迪杰斯特拉算法-西安地铁最短路线问题

    文章说明 图是一种较线性表和树更为复杂的数据结构,在各个领域都有着广泛的应用,如城市交通.电路网络分析.交通灯的设置等,其中,最短路径问题的求解是日常生活中最为常见的问题.在现实生活和生产实践中,有许 ...

最新文章

  1. 用链表生成前序二叉树
  2. python如何爬虫网页数据-如何轻松爬取网页数据?
  3. 应用化学:从二氯甲烷到四氯化碳
  4. touchWX使用 echarts
  5. 午餐前如何安装OpenStack Cloud
  6. 【numpy】np.random.normal()函数
  7. thriftserver的SparkSQL命令行操作Hive表
  8. 震动活塞式柱状取样器的使用
  9. 在windows 10中输入法语等语言的特殊字符
  10. Win10下安装centos7双系统
  11. 疫情推动下的云联络中心终于引起了销售行业的重视。
  12. 【- Light 计划 -】新建了一台Linux云服务器我该干嘛
  13. 闭关之 Vulkan 应用开发指南笔记(四):绘制、几何体片段处理、同步和回读数据
  14. linux命令行的杠“-”、杠杠“--”以及无杠
  15. matlab找多项式最值,如何利用matlab计算最小多项式
  16. duet连win10,duetdisplay这个软件在win10上用不了?安装vs2015的时候想取消安装没有点取消...
  17. 【Stanford CNN课程笔记】4. 反向传播算法
  18. 活久见,40W年薪低?35岁测试工程师惨遭女孩嫌弃,估计是被鸡汤洗脑了
  19. 32.768KHz晶振的使用心得
  20. 商务社交中为何电子名片这么火?都在使用哪一款免费的电子名片?

热门文章

  1. 【步进电机】ULN2003驱动28BYJ-48
  2. android+drawrect边框,drawRect:绘图
  3. 超级短信 handcent sms v4.4.1 android,超级短信Handcent SMS V
  4. 基础系统数据采集工作总结
  5. 为什么数据库排序字段要使用浮点数
  6. linux更新文件名时间,Linux文件的时间及修改命令touch-linux修改文件名
  7. chrome 谷歌浏览器查看网页源代码快捷键
  8. 图与网络可视化实战(matlab实现)
  9. 少年啊,来一发昆特吗(二)——昆特牌的触摸
  10. citra 图形设置_用户发送|这或是我们第一次看下代Windows10的新图形用户界面