心血潮来,想写一篇关于迪捷斯特拉算法的文

迪捷斯特拉算法适合求单源最短路径的问题,例如给你一个图,要你算出某一个起点s,到其他任一点e的最短路径。Dijkstra有人说是贪心,有人说是dp,有人说是弱化版本的bfs,如果想知道原理的小伙伴建议去看算法导论的证明部分~


如图所示,现在我们要求从v0----- 图中任意一个节点的最短路径。

算法思路:首先建立一个数组int d[Max], 这个数组的含义是起点s到其他点的最短距离,最后我们如果把这个数组求出来了,很显然d[i],就是起点s到Vi的最短距离了,假设我们的起点是s,那么d[s]=0,自身到自身的距离为0,其他点我们设置为一个特别大的数字1000000,表示很远的距离

接着,进入循环,我们每次从d[]这个数组中找到距离s最小的数:d[u],然后看一下u到其他没有访问过的节点的距离G[u][i]+d[u]是否小于d[i]这个值,如果小于就更新这个值使得d[i]=G[u][i]+d[u],如果不小于,就不用更新了,一直这样循环下去直到所有的节点被访问~

最初的d数组

如图所示,我们寻找d[i]的最短的一个,很显然是v0,将其标记为以访问,并将这个中介点设置为u,这时的u为v0然后去寻找有没有一个没有访问过的点使得G[u][i]+d[u],有三个需要更新的值,那就是d[v4],d[v3],d[v1],因为他们最初的时候都是无穷大。
更新d数组

更新完毕以后

再次从d这个数组中找到一个最小值u,然后将其标记

寻找剩下没有访问过的节点使得G[u][i]+d[u]的值小于dp[i],并更新其值

很显然,我们发现d[u]+G[u][3]比dp[3]要小,我们更新其值,更新后数组为:

重复上面的步骤,再次从d[i]中未访问的节点中取出一个最小的,

标记后,重复上面的步骤,u开始讯号其他未访问的节点,有没有一个节点i,使得d[i]<G[u][i]+d[u],此时v4不满足,v2满足,我们更新一下数组的值

继续寻找最小值,此时d[v4]最小,标记


重复上面的步骤,更新数组的值~

继续寻找最短距离,此时未v2,标记

重估上面步骤,更新数组的值


继续寻找最小值

至此全部访问完毕~~

数组d中的值就是源点s到各个点的最短距离~

迪杰斯特拉(Dijkstra)相关推荐

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

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

  2. 059.迪杰斯特拉(Dijkstra)算法的原理以及解决最短路径问题

    1. 迪杰斯特拉(Dijkstra)算法的原理 1.1. 算法应用场景-最短路径问题 1.2. 基本介绍 1.3. 步骤详解 1.4. 思路解析 1.5. 图解步骤 2. 迪杰斯特拉(Dijkstra ...

  3. java数据结构和算法——迪杰斯特拉(Dijkstra)算法

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

  4. 迪杰斯特拉(Dijkstra)算法解决最短路径问题

    Dijkstra 算法介绍 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.迪杰斯特拉(Dijkstra)算法是最经典的最短路径算法之一,用 ...

  5. c语言迪杰斯特拉算法求最短路径,迪杰斯特拉 ( Dijkstra ) 最短路径算法

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

  6. 最短路径算法-迪杰斯特拉(Dijkstra)算法

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

  7. Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法

    1.Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法 1.1 迪杰斯特拉(Dijkstra)算法 1.1.1 迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra ...

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

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

  9. 数据结构——图——迪杰斯特拉(Dijkstra )算法

    数据结构--图--迪杰斯特拉(Dijkstra )算法 这是一个按路径长度递增的次序产生最短路径的算法.它的思路大体是这样的. 比如说要求图7-7-3中顶点v0到顶点v1的最短距离,没有比这更简单的了 ...

  10. 最短路径 - 迪杰斯特拉(Dijkstra)算法

    对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...

最新文章

  1. 百万级分组大报表开发与呈现
  2. 大中型网站集群架构企业级高标准全自动实战项目征集
  3. suse docker 安装mysql_Docker(三):Docker安装MySQL
  4. 翻手算法php,PHP各种常见经典算法总结【排序、查找、翻转等】
  5. php写简单接口_php写接口,对比两种写法
  6. 聊聊 HTTP 协议的知识点
  7. bk3432开发的应用实例_SpringCloud应用在Kubernetes上的最佳实践—诊断(线上联调)...
  8. 使用Python调用ASA rest API进行配置
  9. unix域套接字UDP网络编程
  10. 机器学习笔记:t-SNE
  11. 真正的QString转char,utf8编码转gb2312编码
  12. 论文笔记:A novel DRM scheme for accommodating expectations of personal use
  13. js 根据链接下载 excel 文件
  14. 西游之路——python全栈——django中orm的使用(1)
  15. Java实习生常规技术面试题每日十题Java基础(二)
  16. PhpSpreadsheet中文文档 | 基础Spreadsheet开发使用示例
  17. 腾讯区块链强势出击,公链的机会在哪里?
  18. 【Java基础】实例与实例化
  19. echarts绘制节点关系图
  20. 开关电源的工作原理和构成

热门文章

  1. python怎么搜索文献_python论文参考文献有哪些
  2. 为什么在 Google Play 发布应用很久了下载量却很少?
  3. Android TextView中划线、下划线、跑马灯的简单使用
  4. 入门教程pythonpython完整教程视频
  5. 这款耳机亲测,性价比堪比 AirPods
  6. Ubuntu18.04 配置nvidia 460驱动、cuda10.1和cudnn7.6.5
  7. win10怎么把锁屏界面变成壁纸
  8. 用java代码执行命令行并获取返回结果
  9. 基于Springboot+Vue2前后端分离框架的智慧校园系统源码,智慧学校源码+微信小程序+人脸电子班牌
  10. heic是什么格式?如何转成JPG格式?