Dijkstra 算法的手动分析

ops/2024/10/17 18:14:26/

文章目录

    • Dijkstra 算法
      • step0. 初始状态
      • step1. 第一轮
      • step2. 第二轮
      • step3. 第三轮
      • step4. 第四轮

Dijkstra 算法

以下面有向图为例:

10
5
2
3
1
9
2
7
6
4
V0
V1
V4
V2
V3

step0. 初始状态

  • final 数组:标记各顶点是否已找到最短路径
V0V1V2V3V4
TrueFalseFalseFalseFalse
  • dist 数组:记录从源点(V0)到该点(Vi)的最短路径长度
V0V1V2V3V4
0105
  • path 数组:路径上的前驱(前面的结点)
V0V1V2V3V4
-10-1-10

step1. 第一轮

【1】找到 step0 中 :final 数组还未确定的最短路径,且在 dist 数组中最小的顶点 Vi = V4,令 final[i] = True。

  • final 数组:
V0V1V2V3V4
TrueFalseFalseFalseTrue

【2】检查所有邻接自 Vi = V4 的点,若其 final 值为 False,则对比 step0 中的 dist 信息,如果找到的路径比当前的信息还小,则更新其 dist 和 path 信息。

对于 V1(原本 dist = 10, path = 0):final 值为 False,从 V0–>V4–>V1 的路径长度为 5+3=8<10,所以需要更新其 dist =8,path = 4;

对于 V2(原本 dist = ∞, path = -1):final 值为 False,从 V0–>V4–>V2 的路径长度为 5+9=14<∞,所以需要更新其 dist =14,path = 4;

对于 V3(原本 dist = ∞, path = -1):final 值为 False,从 V0–>V4–>V3 的路径长度为 5+2=7<∞,所以需要更新其 dist =7,path = 4。

  • dist 数组:
V0V1V2V3V4
081475
  • path 数组:
V0V1V2V3V4
-14440

step2. 第二轮

【1】找到 step1 中 :final 数组还未确定的最短路径,且在 dist 数组中最小的顶点 Vi = V3,令 final[i] = True。

  • final 数组:
V0V1V2V3V4
TrueFalseFalseTrueTrue

【2】检查所有邻接自 Vi = V3 的点(对应 dist = 7,path = 4),若其 final 值为 False,则对比 step1 中的 dist 信息,如果找到的路径比当前的信息还小,则更新其 dist 和 path 信息。

对于 V0:final 值为 True。

对于 V2(原本 dist = 14,path = 4):final 值为 False,从 V0–>V4–>V3–>V2 的路径长度为 7+6=13<14,所以需要更新其 dist =13,path = 3。

  • dist 数组:
V0V1V2V3V4
081375
  • path 数组:
V0V1V2V3V4
-14340

step3. 第三轮

【1】找到 step2 中 :final 数组还未确定的最短路径,且在 dist 数组中最小的顶点 Vi = V1,令 final[i] = True。

  • final 数组:
V0V1V2V3V4
TrueTrueFalseTrueTrue

【2】检查所有邻接自 Vi = V1 的点(对应 dist = 8,path = 4),若其 final 值为 False,则对比 step2 中的 dist 信息,如果找到的路径比当前的信息还小,则更新其 dist 和 path 信息。

对于 V2(原本 dist = 13,path = 3):final 值为 False,从 V0–>V4–>V1–>V2 的路径长度为 8+1=9<13,所以需要更新其 dist =9,path = 1。

对于 V4:final 值为 True。

  • dist 数组:
V0V1V2V3V4
08975
  • path 数组:
V0V1V2V3V4
-14140

step4. 第四轮

【1】找到 step2 中 :final 数组还未确定的最短路径,且在 dist 数组中最小的顶点 Vi = V2,令 final[i] = True。

  • final 数组:
V0V1V2V3V4
TrueTrueTrueTrueTrue

【2】检查所有邻接自 Vi = V2 的点(对应 dist = 9,path = 1),若其 final 值为 False,则对比 step2 中的 dist 信息,如果找到的路径比当前的信息还小,则更新其 dist 和 path 信息。

已经找不到其他未访问结点,算法结束,以下为最终结果:

  • dist 数组:
V0V1V2V3V4
08975
  • path 数组:
V0V1V2V3V4
-14140

http://www.ppmy.cn/ops/48076.html

相关文章

助力樱桃智能自动化采摘,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建果园种植采摘场景下樱桃成熟度智能检测识别系统

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;再到医疗健康&#xff0c;其影响力无处不在。然而&#xff0c;当我们把目光转向中国的农业领域时&#xff0c;一个令人惊讶的…

嵌入式学习——数据库(SQL语句和sqlite编程)——day35

1. 数据库 数据库是一个按数据结构来存储、管理和检索数据的计算机软件系统。它是存储数据的电子仓库&#xff0c;旨在以高效、有组织的方式处理大量信息。 2. SQLite SQLite是一个进程内的库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。 …

矩阵练习2

48.旋转图像 规律&#xff1a; 对于矩阵中第 i行的第 j 个元素&#xff0c;在旋转后&#xff0c;它出现在倒数第i 列的第 j 个位置。 matrix[col][n−row−1]matrix[row][col] 可以使用辅助数组&#xff0c;如果不想使用额外的内存&#xff0c;可以用一个临时变量 。 还可以通…

Python爬取城市空气质量数据

Python爬取城市空气质量数据 一、思路分析1、寻找数据接口2、发送请求3、解析数据4、保存数据二、完整代码一、思路分析 目标数据所在的网站是天气后报网站,网址为:www.tianqihoubao.com,需要采集武汉市近十年每天的空气质量数据。先看一下爬取后的数据情况: 1、寻找数据…

Go 文件压缩解压

在Go语言中&#xff0c;archive/zip包提供了创建、读取和解压缩ZIP格式文件的功能。 一、创建ZIP文件并添加内容----压缩 package mainimport ("archive/zip""bytes""fmt""io""log""os" )func main() {// 创建一…

云联HIS系统源码,二级医院信息系统源码,支持云架构部署模式

采用java语言开发B/S广域互联模式&#xff0c;支持云架构部署模式&#xff0c;支持大数据分析技术&#xff1b;支持与医保平台接口、电子票据对接。 云HIS系统相关技术&#xff1a; 后台&#xff1a;JavaSpring&#xff0c;SpringBoot&#xff0c;SpringMVC&#xff0c;Sprin…

深度学习 - PyTorch简介

基础知识 1. PyTorch简介 PyTorch的特点和优势&#xff1a; 动态计算图、易用性、强大的社区支持、与NumPy兼容。 安装和环境配置&#xff1a; 安装和验证PyTorch&#xff1a; pip install torch torchvision验证安装&#xff1a; import torch print(torch.__version__)运行…

UE4 RPC进行网络同步

说明 基于UE本身提供的RPC同步机制 RPC远程过程调用允许客户端或服务器通过网络连接相互发送消息&#xff1a; 使用时需要注意&#xff1a; 1、必须从 Actor 上调用 2、Actor 必须被复制&#xff0c;注意勾选BP中Replicates&#xff0c;或使变量bReplicates true 3、注意如…