目录

一、算法思想

二、算法详细步骤

三、伪代码 + C++代码

四、算法复杂度分析

五、算法改进

六、应用案例


一、算法思想

1、Dijkstra 算法是用来求解单源最短路径问题的经典算法,其本质上是一个贪心算法。

(PS: 求任意两个结点之间最短路径的有 Floyd 算法)

2、算法的基本思想是:设置一个顶点集合 S 并不断地做贪心选择来扩充这个集合。

3、该算法适用:1)边权为,2)有向无向都适用

有一些相关的性质:

  1. 对于边权为正的图,任意两个结点之间的最短路,不会经过重复的结点。
  2. 对于边权为正的图,任意两个结点之间的最短路,不会经过重复的边。
  3. 对于边权为正的图,任意两个结点之间的最短路,任意一条的结点数不会超过 n ,边数不会超过 n - 1 。

二、算法详细步骤

假设:

1)已知带权图 G = (V, E)

- V: 顶点(Vertex)的集合

- E: 边(Edge)的集合

- 边 e = (u, v), u  V, v  V

2)一个顶点属于S当且仅当从源到该顶点的最短路径长度已知。

3)  数据结构:数组d,为记录当前每个顶点所对应的最短特殊路径长度(源v0到该顶点)。

算法步骤:

1、S 中初始时仅包含源 v0

2、从顶点集合 { V - S } 中选取最短特殊路径长度最短的顶点,并将其加入 S

3、对数组 d 进行更新(更新条件:若源 v0 通过某个顶点到该顶点的路径比原先 d 数组保存的小)

三、伪代码 + C++代码

1、伪代码

清除所有点的标号  // 属于集合S的标记
设d[0] = 0, 其他d[i] = INF  // initial
循环n次 {在所有未标号结点中,选出d值最小的结点x  // 从{V - S}中选出从源出发距离最短的顶点给结点x标记  // 加入集合S对于从x出发的所有边(x,y),更新d[y] = min{d[y], d[y]+w(x, y)}  // 更新所有x的出边顶点
} 

2、C++代码实现

memset(v, 0, sizeof(v));
for(int i = 0; i < n; i++) d[i] = (i==0 ? 0 : INF);
for(int i = 0; i < n; i++) {int x, m = INF;for(int y = 0; y < n; y++) if(!v[y] && d[y]<=m) m = d[x=y];v[x] = 1;for(int y = 0; y < n; y++) d[y] = min(d[y], d[x] + w[x][y]);
}

四、算法复杂度分析

五、算法改进

六、应用案例

更新:2021年5月3日

未完,待续。。。

单源最短路径Dijkstra算法的思想、详细步骤、代码相关推荐

  1. 分支限界法:单源最短路径--dijkstra算法

    单源最短路径–dijkstra算法 前面已经多次介绍过dijkstra算法是贪心算法,是动态规划,实际上可以从分支限界的角度来理解: 分支限界法 分支限界法,实际上就是回溯法,一般意义的回溯法是基于深 ...

  2. 数据结构与算法—单源最短路径dijkstra算法

    介绍 对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或 ...

  3. JAVA编程求单源最短路径_【算法】单源最短路径——dijkstra算法

    一,概念 单源最短路径 给定一个带权有向图G=(V,E),其中每条边的权是一个实数.另外,还给定V中的一个顶点,称为源.要计算从源到其他所有各顶点的最短路径长度.这里的长度就是指路上各边权之和.这个问 ...

  4. dijkstra 算法_数据结构与算法—单源最短路径dijkstra算法

    介绍 对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或 ...

  5. 单源最短路径dijkstra算法

    介绍 dijkstra算法也是解决单源最短路径问题的一种方法.它要求图中路径都是非负的.而且,它的效率要高于bellman算法. 实现 首先定义图的结点信息和边信息. struct _Node;typ ...

  6. 单源顶点最短路径java_单源最短路径-Dijkstra 算法

    Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问题:求a点到各个点的最短距离,如下图 ...

  7. 单源最短路径---Dijkstra算法

    有这样一道题:在一个图(如图所示)中,一共有四个点:1 2 3 4 这四个点之间各有相连,且每条边都有自己的权值.现在小明在点1上, 他想要到3去,请问最短路径是多少. 很容易得到该图的邻接矩阵.我们 ...

  8. 单源最短路径Dijkstra算法升级:出现多条最短路径,输出之?

    文章目录 引言:单条路径的标配算法 进阶:记录多条路径的改进版Dijkstra算法: 1. 对`P[]`数组进行扩充 2. 求最短路径条数 3. 输出所有最短路径 引言:单条路径的标配算法 一个普通. ...

  9. 单源最短路径(Dijkstra算法)

    题目:http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=208 #include <iostream> #incl ...

最新文章

  1. 结构型模式之Bridge模式
  2. CloudStack各版本新特性
  3. 微软热门知识点之------c#3.0新特性【转】
  4. 利用TortoiseSVN获取最新版本的OpenCV源码
  5. 对软件体系结构的认识
  6. oracle查询使用or,查询视图,使用or就用不上索引
  7. java web js加版本号_[Java教程]js 比较版本号(一)
  8. 隐马尔科夫模型(Hidden Markov Models) 系列之三
  9. 汉诺塔(三) 判断操作是否合法 + 栈(stack)数组
  10. Mac 显示sudo: pip: command not found
  11. web开发python 人工智能_【图片】python可以做什么———Web开发,数据分析,人工智能和脚本开发【python学习吧】_百度贴吧...
  12. CentOS7通过yum安装Openresty
  13. eval同时绑定两个值:通过String.Format给超链接中的两个参数赋值
  14. kotori和糖果(OEIS)
  15. 写给本命年24岁的自己和你:这一年决定你的未来
  16. 呕心沥血之飞冰(icejs)项目使用vue组件 -- vuera
  17. 你的电脑/设备需要恢复 错误码0xc000014c
  18. 【20200129】win10 win7双系统安装成功后,win7提示未激活怎么办?
  19. A. Binary Decimal acii码 字符 数字的转换 vector容器 sort 排序
  20. JavaScript对象与JSON格式的转换

热门文章

  1. 虎翼网关于论坛整改的通知
  2. 漫谈 Clustering (1): k-means
  3. [设计模式] - 原型模式
  4. 海马T1团餐机副屏显示系统设置中,请前往前屏操作
  5. 利用DNS隧道免费上网
  6. 腾讯年度盛会!百位大咖云集!门票限时领!速来!
  7. js split函数
  8. 西工大NOJ数据结构实验——1.2高精度计算PI值
  9. c语言和java哪个有前途_学java和c哪个前景好?
  10. 【XXL-JOB】XXL-JOB的搭建和使用