迪杰斯特拉算法是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
算法思想:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。

算法步骤:

  1. 初始时,S只包含源点,即S={v},v的距离为0。U包含除v外的其他顶点,即:U={其余顶点},若v与U中顶点u有边,则<u,v>正常有权值,若u不是v的出边邻接点,则<u,v>权值为∞。
  2. 从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。
  3. 以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。
  4. 重复步骤b和c直到所有顶点都包含在S中。
算法实例:

以上是无向图,以下是用Dijkstra算法找出以A为起点的单源最短路径步骤:

转载于:https://www.cnblogs.com/wade-luffy/p/7763371.html

(Dijkstra)迪杰斯特拉算法-最短路径算法相关推荐

  1. 迪杰斯特拉算法c语言要点,C语言迪杰斯特拉实现最短路径算法要点.doc

    C语言迪杰斯特拉实现最短路径算法要点.doc 数据结构课程设计报告 ----旅游咨询系统设计 目录 一.需求分析- 2 - 二.系统分析- 2 - 三.概要设计- 3 - 一.系统划分- 3 - 二. ...

  2. 迪杰斯特拉算法c语言6,C语言迪杰斯特拉实现最短路径算法.doc

    数据结构课程设计报告 ----旅游咨询系统设计 目录 一.需求分析- 2 - 二.系统分析- 2 - 三.概要设计- 3 - 一.系统划分- 3 - 二.邻接矩阵建立流程图:- 3 - 三.迪杰斯特拉 ...

  3. Python 实现Dijkstra(迪杰斯特拉)最短路径算法

    本文的算法思想来自于知乎的一篇文章.大家可以点击链接去看看,会有意外收获哦.

  4. Dijkstra(迪杰斯特拉)单元最短路径问题

    代码如下 #include<iostream> using namespace std; #define maxint 32767 int secl(int* s, int* dist, ...

  5. 图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)

    一.基础知识   有向图   无向图 以无向图为例: 邻接矩阵: 度矩阵(对角矩阵): 二.最小生成树 应用:将网络顶点看着城市,边看着城市之间通讯网,边的权重看着成本,根据最小生成树可以构建城市之间 ...

  6. 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)

    Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法能得出最短路径的最优 ...

  7. Dijkstra(迪杰斯特拉)算法求单源最短路径问题

    Dijkstra(迪杰斯特拉)算法求单源最短路径问题 重要的事情说三遍:代码不是我写的!代码不是我写的!代码不是我写的! 第一个算法是严蔚敏数据结构(C语言版)上写的,第二个算法是王道数据结构上写的, ...

  8. [转]最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现

    最短路径算法-Dijkstra(迪杰斯特拉)算法分析与实现(C/C++) Dijkstra算法 ----------- 最后更新时间:2011.9.25 ----------- Dijkstra(迪杰 ...

  9. 最短路径之Dijkstra(迪杰斯特拉)算法(无向图)

    简介      Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.由for循环可知,其时间 ...

  10. MATLAB轻松绘制地图路线——Dijkstra(迪杰斯特拉)算法最短路径规划

    文章目录 1. 地图绘制 2. 计算各节点之间的距离 3. Dijkstra(迪杰斯特拉)算法 4. 根据计算出的距离利用Dijkstra(迪杰斯特拉)算法找出指定节点之间的最短路径 工程文件(可直接 ...

最新文章

  1. 再有人问 Java 中的注解就把这篇文章丢给他!
  2. java删除指定的文件夹_java脚本删除指定目录下的所有指定名称的文件夹
  3. Spring事务源码分析
  4. kafka是什么_终于知道Kafka为什么这么快了!
  5. Windows消息循环机制详细概述
  6. How Many Answers Are Wrong HDU - 3038(带权并查集)
  7. 韦东山 IMX6ULL和正点原子_GPIO和Pinctrl子系统的使用在100ASK_IMX6ULL上机实验
  8. 喜大普奔!Django官方文档终于出中文版了
  9. 用C++ 设计一个不能被继承的类
  10. android 编译模块
  11. 实用软件工程复习课重点
  12. 《jdk8u源码分析》jvm.dll接口列表
  13. laravel8 微信小程序(实现简单签到功能)
  14. JavaScript实现解析xml文件数据
  15. Java获取电脑外网ip地址方法
  16. css改变透明背景png图片的图标颜色
  17. (抖音快手)三种代码生成炫酷代码雨!!!
  18. 射影几何----极点极线割线共点四点调和定理
  19. 谁是最大的竞争对手互联网宝宝军团?
  20. C++/MFC 面试题(六、逻辑题)

热门文章

  1. Linux系统(三)vi、vim编辑器和shell编程
  2. 求解偏微分方程开源有限元软件deal.II学习--Step 48
  3. flex-direction css3属性设定弹性盒子模型子元素反向排列
  4. 俞昆20155335《网络对抗》MSF基础应用
  5. cf914F. Substrings in a String(bitset 字符串匹配)
  6. PyCharm 默认运行 unittest
  7. 在propreties文件中引用另一个properties文件中的内容
  8. 笔记 Activator.CreateInstance(Type)
  9. Python新手学习基础之条件语句——elif语句
  10. HDU 5071 模拟