Dijkstra算法(迪杰斯特拉算法)

迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。
是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。
迪杰斯特拉算法求一个点到其他所有点的最短路径时间复杂度为 O(n^2)。

我第一次接触到Dijkstra算法是在离散数学的图论课上,关于计算最短路径问题的算法
下面举个例子来解释Dijkstra算法:

其实很容易看出这个有权图以A为起始点的最短路径,但还是按照迪杰斯特拉算法的思想简单介绍一下
可以设定有两个集合S和U。
初始时,S中只有起点s;U中是除s之外的顶点,并且U中顶点的路径是“起点s到该顶点的路径”。然后,从U中找到路径最短的顶点,并将其加入到S中;接着,更新U中的顶点和顶点对应的路径。然后,再从U中找到路径最短的顶点,并将其加入到S中;接着,更新U中的顶点和顶点对应的路径。……重复该操作,直到遍历完所有顶点。
----- S是已计算出最短路径的顶点的集合
----- U是未计算出最短路径的顶点的集合

  1. 假设A为起始点,S={A(0)}
    U={C(4),B(3),D(∞),E(∞),F(∞),G(∞)}
  2. 选择顶点B,S={A(0),B(3)}
    U={C(4),D(8),E(∞),F(∞),G(∞)}
  3. 选择顶点C, S={A(0),B(3),C(4)}
    U={D(5),E(),F(∞),G(∞)}
  4. 选择顶点D,S={A(0),B(3),C(4),D(5)}
    U={F(7),E(13),G(∞)}
  5. 选择顶点F, S={A(0),B(3),C(4),D(5),F(7)}
    U={E(13),G(13)}
  6. 选择顶点E, S={A(0),B(3),C(4),D(5),F(7),E(13)}
    U={G(13)}
  7. 选择顶点G, S={A(0),B(3),C(4),D(5),F(7),E(13),G(13)}
    U={}

我也不清楚要不要省略第六步,毕竟E点和G点都是13,不过按照规则是要遍历完所有顶点,我认为第六步对最后的结果没有影响

刚学这个算法,如有错误,请各位大佬指正。
以后如果有更深入的理解,我会补上的。

Dijkstra算法相关推荐

  1. [C] Dijkstra算法——通过边实现松弛

    Dijkstra算法--通过边实现松弛 本算法学习指定一个点(源点)到其余各个顶点的最短路径,也叫做单源最短路径例如求下图1号顶点到2,3,4,5,6号顶点的最短路径 这个时候你可能就要问了,为什么不 ...

  2. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

  3. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  4. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  5. 【算法】【ACM】深入理解Dijkstra算法(单源最短路径算法)

    Dijkstra算法是用来求解从某个源点到其他各顶点的最短路径(单源最短路径). 下面的Dijkstra算法的讲解都是基于这个有向图,在遇到其他问题可以类比. 算法的基本思想: 把图中的定点分成两组, ...

  6. 拿来就能用!Dijkstra 算法实现快递路径优化

    作者 | 李秋键 责编 | 伍杏玲 出品 | AI科技大本营(ID:rgznai100) 近几年来,快递行业发展迅猛,其中的程序设计涉及到运送路径的最优选择问题,下面我们尝试模拟实现快递路径优化问题, ...

  7. 基于Dijkstra算法的武汉地铁路径规划!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:牧小熊,华中农业大学,Datawhale原创作者 前言 最近爬取了 ...

  8. 【路径规划】Dijkstra算法——超详细原理图解

    Dijkstra算法详解 1. Dijkstra算法原理  1.1. 有向图的Dijkstra算法  1.2. 无向图和栅格网络的拓展   1.2.1. 无向图   1.2.2. 栅格网络 2. Di ...

  9. 图论-最短路Dijkstra算法详解超详 有图解

    整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...

  10. 【Dijkstra算法】未优化版+优先队列优化版

    https://blog.csdn.net/YF_Li123/article/details/74090301 Dijkstra算法伪代码://G为图:数组d为源点到达各点的最短路径长度,s为起点 D ...

最新文章

  1. linux命令:groupadd
  2. CORE ANIMATION的学习备忘录
  3. 你知道这些产品设计灵感网站吗?
  4. Java ADF开发入门-简单ArcGIS Server Web ADF应用
  5. C++编程练习:多态实验——利用抽象类和纯虚函数,编程计算正方体、球体和圆柱体的表面积和体积。
  6. anylogic中如何构建复杂网络_如何对复杂网络建模所需要的数据进行预处理
  7. axios从入门到源码分析 -http-xhr
  8. android 开发 - 结束所有activity
  9. gdb java,调用gdb来调试java程序
  10. mysql 根据总分排名
  11. Neural Architecture Search(NAS)强化学习寻找最优网络、NASNet、MNASNet
  12. Hibernate 二级缓存的作用
  13. MyBatis批量插入几千条数据,请慎用foreach
  14. [渝粤教育] 三江学院 财务管理 参考 资料
  15. 深入浅出计算机组成原理26-Superscalar和VLIW:如何让CPU的吞吐率超过1?
  16. PHP使用PHPMailer实现发送qq邮箱
  17. GHostNet网络最通俗易懂的解读【不接受反驳】
  18. IoT Analytics:物联网2020年回顾,十大重要进展
  19. 大龄Android 开发们最担忧的事儿,太难了~
  20. safari对z-index的兼容性

热门文章

  1. ps3 自制系统的C 语言,老树发新芽:PS3自制系统的使用与研究
  2. 计算机可以怎样做游戏,如何制做游戏 怎么制做游戏
  3. android 动态库符号表,Android NDK隐藏jni动态库的内部符号表
  4. 电脑如何双开两个微信
  5. 全景图拍摄方式有哪些?全景图拍摄制作流程是什么?
  6. 查看计算机温度指令,怎么看cpu温度(电脑CPU温度怎么查看?)
  7. 时间序列分析之ADF检验
  8. 金仓数据库KingbaseES服务启动失败原因
  9. 论文分享(2)MASAD: A Large-Scale Dataset for Multimodal Aspect-Based Sentiment Analysis
  10. Liang-Barsky直线段裁剪算法