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

问题:求a点到各个点的最短距离,如下图:

要求最短距离我们得知道以下两个关于最短距离的定理:

1.

可以简单描述为:最短路径的子路径也是最短路径。

2.如果考虑到边的权值为正数,则由定理 7.2 可以得到以下结论:若π = (s , u1 , u2 , … , uk)是从s到uk的最短路径,则从s到各顶点ui(i=1, 2, …k)的最短路径是严格递增的。

下面我们介绍一下Dijkstra 算法。

Dijkstra 算法将带权图 G = (V, E)的顶点分为两个集合:S 、V - S,其中

顶点集 S 是已求出的最短路径的终点集合(初始时 S = {s})。

顶点集 V-S 是尚未求出最短路径的终点的集合。

算法将按最短路径长度递增的顺序逐个将 V-S 中的顶点加入到 S 中,直到所有顶点都被加 入到 S 中为止。 算法为每个顶点 v 定义了一个变量 distance,该变量记录了从 s 出发,经由 S 中的顶点 到达 v 的当前最短距离。初始时,每个顶点的当前最短距离 distance 为图中从 s 到 v 的边的 权值,如果从 s 到 v 没有边则 distance(v) = ∞,并且 distance(s) = 0

Dijkstra 算法的基本执行过程如下:

① 初始化: S = {s};

distance(s) = 0;

distance(ui) = w(s , ui)或∞,(ui∈V-S);

② 选择distance (uk) = min{ distance (ui)| ui ∈V-S},uk为下一条最短路径的终点;

③ S = S ∪{ uk }

④ 以uk为“中转”,修正V-S中各个顶点distance:

distance (ui) = min{ distance (ui) , distance (uk)+w(uk , ui)} ui∈V-S

⑤ 重复②—④步|V|-1 次。

具体如下图所示。

Dijkstra 算法执行过程

描述如下:

1.(a)图中先初始化 a 到自身的距离为0,与a直接相连的b和c的距离为10和3其他不直接相连的记为∞。此时S={a},初始化后结果如图(b).

2.(b)图中因为distance(b)>distance(c)所以选择C作为下一条最短路径的终点。此时S={a,c},然后修正a到V-S中各个顶点distance,因为与C直接相连的边有b,d,e,然后与S中其他定点(此时只有a定点)直接到V-S中个定点的distance比较后得到结果如图(c).

3.重复步骤2的动作直到所有定点都包含在S中,最终结果如图(f).

理解了Dijkstra 算法吗?下一篇我们讲具体java代码实现!

分享所得,方便别人,成就自己,感谢大家!

单源顶点最短路径java_单源最短路径-Dijkstra 算法相关推荐

  1. 网上路径的图片有时候遍历不出来_最短路径问题(1)——Dijkstra算法

    找到距离集合Q最近的点B,将其加入集合Q中,并从P中删除,遍历与B相邻的点.由数组N可知A->B=5,B->D=5,所以A->B+B->D = 10,小于原本A->D的距 ...

  2. (单源最短路径)一文搞懂dijkstra算法

    前言 大家好,我是bigsai,今天给大家讲讲Dijkstra算法,下次拿着这个算法找女神少绕路,有女朋友的可以试试行不行的通. 对于Dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较 ...

  3. 单源最短路径的迪克斯特拉(Dijkstra)算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点(节点需为源点)到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展 ...

  4. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  5. dijkstra最短路径算法视频_单源最短路径(1):Dijkstra 算法

    一:背景 Dijkstra 算法(中文名:迪杰斯特拉算法)是由荷兰计算机科学家 Edsger Wybe Dijkstra 提出.该算法常用于路由算法或者作为其他图算法的一个子模块.举例来说,如果图中的 ...

  6. 单源最短路径(1):Dijkstra算法

    原文: https://subetter.com/algorith... 一:背景 Dijkstra算法(中文名:迪杰斯特拉算法)是由荷兰计算机科学家Edsger Wybe Dijkstra提出.该算 ...

  7. 【数据结构笔记24】单源最短路(迪克斯拉Dijkstra算法),多源最短路(弗洛伊德Floyd算法)

    本次笔记内容: 7.1.1 概述 7.1.2 无权图的单源最短路 7.1.3 有权图的单源最短路 7.1.3-s 有权图的单源最短路示例 7.1.4 多源最短路算法 文章目录 最短路径问题 最短路径问 ...

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

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

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

    定义 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题.迪杰斯特拉算法 ...

最新文章

  1. JVM总结---各处总结
  2. vue 传递 对象 路由_vue 04 -vue路由对象($route)参数简介以及和router的区别
  3. 代码实现——MapReduce统计单词出现次数
  4. sencha app watch php,我的第一个基于SenchaTouch的WebApp
  5. java高级考试题_JAVA高级考试题
  6. 四川地震,物联网地震预警系统立功了
  7. 添加常见 URL Scheme 列表,方便快速查询⓶QA:URL Scheme适配好为何仍然报错
  8. paip.验证码识别---扭曲与旋转文字
  9. 爬取百度贴吧发帖信息并保存到scv文件中
  10. 计算机信息技术和网络技术的区别,信息技术计算机技术网络技术通信技术的区别与联系...
  11. html制作网页包涵视频和音频,HTML5 网页音频和视频( 和 )
  12. JavaFX 2 Dialogs
  13. 万字攻略全面了解selenium_selenium教程
  14. 攻略:大陆人成立香港公司以后如何运营?
  15. bzoj1499(DP+单调队列)
  16. Oracle SQL 基础要点
  17. predict函数 R_超星尔雅-R语言学习总结(上)
  18. 记ePub.js使用过程中的那些事
  19. 20 张图表达程序员的心酸
  20. 篮球比赛计时计分系统java_非常实用的java自动答题计时计分器

热门文章

  1. 使用Python加载谷歌地图并可视化
  2. Android之动态更换桌面图标
  3. 计算机AMD方案不超过4000元,4000元预算办公电脑怎么买?驱动哥搞了一套无短板的AMD组合...
  4. 汽车行业大趋势——软件定义汽车
  5. 菜鸟小万的每天一道ccf题Day22(202104-01灰度直方图)
  6. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用residuls函数从模型中提取每个样本点的残差值、可视化残差与拟合值之间的散点图来看残差的分布模式
  7. ICA 分类语音分离
  8. C# null与nullable类型
  9. 健世科技再次冲刺港股:年亏5亿 高瓴与春华资本是股东
  10. NFT Insider #45:游戏巨头育碧与 The Sandbox 达成合作,YGG SEA战略投资 Dappie Gang