迪杰斯特拉(di jie qi)算法

这里有一张图:

假设要求从1号节点到5号节点的最短路。那么根据迪杰斯特拉算法的思想,我们先看:

节点1,从节点1出发的一共有3条路,分别是1-6、1-3、1-2。然后我们分别看每条路的权值,发现1-6的权值为14,记录下来、1-3的权值为9,记录下来、1-2的权值为7,记录下来。我们发现好像不能再从1号节点发现什么了,所以,我们把它out掉。

接着按顺序看2号节点,从节点2发出了2条路分别是2-3与2-4,我们接着向计算1号节点一样计算2号节点。先计算2-3,权值为10。咦?我们好像已经在计算1号节点的时候标记过了,也就是说现在到3号节点有两种方案,分别是1-3与1-2-3,通过比较,我们发现9〉7+10,所以标记不变,依旧是9。接下来看2-4,没有被标记过,记录15。Out掉节点2

然后就该节点3了,我们发现有两条路,且都没被标记过,分别记录2与11,out掉节点3

节点4有两条路,发现从3-4更方便标记11。Out掉。

节点6有两条路,3-6方便标记为2。Out掉。

最后5号节点有两条路从4到5最短,5号节点标记为6。

我们达到了光辉的顶点,发现最后路径是1-3-6-5和为20。

迪杰斯特拉算法具有明显的贪心特征,通过每个节点去最优值的过程我们称之为“松弛”,松弛之后,答案显而易见。

实际上对于松弛过程的模拟,核心代码只有两行:

if(dis[v]>dis[u]+e[u][v])

dis[v]=dis[u]+e[u][v];

(咦,你的核心代码为什么没有找最近的节点?哈哈思(sheng)考(lve))

迪杰斯特拉算法的局限性

不难看出(好粗暴的词汇)它的时间复杂度为O((M+N)logN)空间复杂度为O(M)看起来还不错,但它无法解决权值为负数的情况,所以用前先审题哦。

转载于:https://www.cnblogs.com/lijiaxin-blog-cpp/p/5610007.html

【算法杂谈】LJX的迪杰斯特拉算法报告相关推荐

  1. >算法笔记-动态规划-最短路径迪杰斯特拉算法

    算法笔记-动态规划-最短路径迪杰斯特拉算法 作者:星河滚烫兮 前言   图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者 ...

  2. dijkstra算法_最短路径问题——迪杰斯特拉算法(Dijkstra)

    假期过长,导致停更了好长时间,复习一道算法题找找感觉. 前段时间看到一篇文章,里面提到了统治世界的十大算法,其中之一就是迪杰斯特拉算法(Dijkstra),该算法主要解决的"最短路径&quo ...

  3. dij算法堆优化_迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少

    算法实现步骤: a.初始时,只包括源点,即S = {v},v的距离为0.U包含除v以外的其他顶点,即:U ={其余顶点},若v与U中顶点u有边,则(u,v)为正常权值,若u不是v的出边邻接点,则(u, ...

  4. dij算法堆优化_迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少(示例代码)...

    算法实现步骤: a.初始时,只包括源点,即S = {v},v的距离为0.U包含除v以外的其他顶点,即:U ={其余顶点},若v与U中顶点u有边,则(u,v)为正常权值,若u不是v的出边邻接点,则(u, ...

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

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

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

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

  7. 数据结构——最小生成树之prime算法(与最短路径之迪杰斯特拉算法很像)

    最小生成树之prime算法 ***最小生成树:一个连通图的生成树中,所有边的权值加起来最小的生成树:称为最小生成树: [简介]:Prime算法可在加权连通图里搜索最小生成树.即:所有边的权值之和为最小 ...

  8. C++迪杰斯特拉算法求最短路径

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

  9. Dijkstra迪杰斯特拉算法 C++实现

    本篇文章主要介绍了Dijkstra迪杰斯特拉算法的C++实现,文章包含两个部分,在第一部分中我会简单介绍迪杰斯特拉算法以及一些个人的理解,第二部分会对C++代码的逻辑进行解释.下面是我已经上传的代码资 ...

最新文章

  1. 用Python来分析5天破10亿的哪吒,为啥这么火?
  2. 支付宝接口调用问题快速通道
  3. 进击的Android Hook 注入术《一》
  4. css 带轮廓的圆,CSS3 圆球轮廓动画
  5. Vue2.x—理解vuex核心概念action(使用到ES6的变量的解构赋值)
  6. GPU Gems1 - 19 基于图像的光照(Image-Based Lighting)
  7. 如何基于tomcat构建web站点
  8. 测试工作笔记001---web测试_工作经验_注意点_随时更新
  9. 联通BSS-ESS-CBSS系统安装相关
  10. 【写论文技巧】如何写一篇好论文?
  11. 多传感器融合定位技术
  12. Kata 在 Kubernetes 中的网络模型
  13. 50个好网站,从此上网不再虚度!
  14. java中的文件存储_File存储 - 文件存储
  15. ACP知识域四---团队绩效
  16. Windows 10 企业版许可证即将过期怎么办
  17. 面试前端的简历的注意事项
  18. JS实现最美的3D宇宙效果
  19. QDateTime相关格式
  20. 天猫精灵智能设备对接(8) 开发者网关地址

热门文章

  1. 微信小程序:点marker,线polyline,面polygons的渲染
  2. VS 2017产品密匙
  3. informatica tips_1
  4. IPFS 深入浅出:从《黑镜》说起
  5. [转]关于卢平的一些想法
  6. 016 Rust死灵书之安全方式内存初始化
  7. html5弹页面腮红,腮红总是打的很奇怪 这里有画腮红的小技巧
  8. 第十二届蓝桥杯省赛JAVA B组杨辉三角形个人题解
  9. 短视频直播平台系统app开发搭建方案,助力企业搭建细分领域短视频app,开发多种短视频变现模式
  10. python如何定义正整数_Python如何将一个正整数分解为质因数相乘