迪杰斯特拉(Dijkstra)
心血潮来,想写一篇关于迪捷斯特拉算法的文
迪捷斯特拉算法适合求单源最短路径的问题,例如给你一个图,要你算出某一个起点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)相关推荐
- 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)
目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...
- 059.迪杰斯特拉(Dijkstra)算法的原理以及解决最短路径问题
1. 迪杰斯特拉(Dijkstra)算法的原理 1.1. 算法应用场景-最短路径问题 1.2. 基本介绍 1.3. 步骤详解 1.4. 思路解析 1.5. 图解步骤 2. 迪杰斯特拉(Dijkstra ...
- java数据结构和算法——迪杰斯特拉(Dijkstra)算法
目录 一.迪杰斯特拉(Dijkstra)算法介绍 二.迪杰斯特拉(Dijkstra)算法过程 三.迪杰斯特拉(Dijkstra)算法--应用场景(最短路径问题) 四.迪杰斯特拉(Dijkstra)算法 ...
- 迪杰斯特拉(Dijkstra)算法解决最短路径问题
Dijkstra 算法介绍 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.迪杰斯特拉(Dijkstra)算法是最经典的最短路径算法之一,用 ...
- c语言迪杰斯特拉算法求最短路径,迪杰斯特拉 ( Dijkstra ) 最短路径算法
迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本 ...
- 最短路径算法-迪杰斯特拉(Dijkstra)算法
最短路径算法-迪杰斯特拉(Dijkstra)算法 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思 ...
- Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法
1.Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法 1.1 迪杰斯特拉(Dijkstra)算法 1.1.1 迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra ...
- java实现迪杰斯特拉(Dijkstra)算法求解最短路问题
迪杰斯特拉(Dijkstra)算法是由荷兰计算机科学家狄克斯特拉于1959年提出的.是寻找从一个顶点到其余各顶点的最短路径算法,可用来解决最短路径问题. 迪杰斯特拉算法采用贪心算法的策略,将所有顶点分 ...
- 数据结构——图——迪杰斯特拉(Dijkstra )算法
数据结构--图--迪杰斯特拉(Dijkstra )算法 这是一个按路径长度递增的次序产生最短路径的算法.它的思路大体是这样的. 比如说要求图7-7-3中顶点v0到顶点v1的最短距离,没有比这更简单的了 ...
- 最短路径 - 迪杰斯特拉(Dijkstra)算法
对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...
最新文章
- 百万级分组大报表开发与呈现
- 大中型网站集群架构企业级高标准全自动实战项目征集
- suse docker 安装mysql_Docker(三):Docker安装MySQL
- 翻手算法php,PHP各种常见经典算法总结【排序、查找、翻转等】
- php写简单接口_php写接口,对比两种写法
- 聊聊 HTTP 协议的知识点
- bk3432开发的应用实例_SpringCloud应用在Kubernetes上的最佳实践—诊断(线上联调)...
- 使用Python调用ASA rest API进行配置
- unix域套接字UDP网络编程
- 机器学习笔记:t-SNE
- 真正的QString转char,utf8编码转gb2312编码
- 论文笔记:A novel DRM scheme for accommodating expectations of personal use
- js 根据链接下载 excel 文件
- 西游之路——python全栈——django中orm的使用(1)
- Java实习生常规技术面试题每日十题Java基础(二)
- PhpSpreadsheet中文文档 | 基础Spreadsheet开发使用示例
- 腾讯区块链强势出击,公链的机会在哪里?
- 【Java基础】实例与实例化
- echarts绘制节点关系图
- 开关电源的工作原理和构成
热门文章
- python怎么搜索文献_python论文参考文献有哪些
- 为什么在 Google Play 发布应用很久了下载量却很少?
- Android TextView中划线、下划线、跑马灯的简单使用
- 入门教程pythonpython完整教程视频
- 这款耳机亲测,性价比堪比 AirPods
- Ubuntu18.04 配置nvidia 460驱动、cuda10.1和cudnn7.6.5
- win10怎么把锁屏界面变成壁纸
- 用java代码执行命令行并获取返回结果
- 基于Springboot+Vue2前后端分离框架的智慧校园系统源码,智慧学校源码+微信小程序+人脸电子班牌
- heic是什么格式?如何转成JPG格式?