最短路径-Dijkstra 算法

前言

迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止

使用场景

  • 有向图
  • 没有负权边(邻接点之间的权重)

具体算法

变量说明

v_0:起始点;
w:邻接点之间的权重;
S:集合,所属其结点是已找到v0到该点的最短路径,称永久标号结点;
T :集合,所属其结点是还未找到最短路径的结点,称临时标号结点;
L_i:表示从起点 v_0 到 v_i 的最短路径上的权(此时,称为永久标号),或表示从起点 v_0 到 v_i 的最短路上的权的上界(此时,称为临时标号);
lamda_i:结点 vi 对应路径权值 L_i 的上一结点下标,用于反推最短路径;
(lamda_i,L_i):结点标号, lamda_i 和 L_i 的意义如上;
i:是下标。

算法描述

为了说明方便,路径起结点下标为0,该结点邻接点分别1,2,3等,邻接点的邻接点的下标依次加1。

应用时,下标就是指向该结点的指针

Step1:令 u_i = 0, i = 0,lamda_i = -1 , u_j = +无穷, lamda_j = 0 (1 <= j <= n - 1),S = {v_0} ,T = {v_1,…,v_n-1},其中 S 中的点给予永久标号; T 中的点给予临时标号。
Step2:i = 0
Step3:如果 v_i 有邻接点,取 v_i 的邻接点 v_j, v_j 不属于 S,u_j = min{u_j,u_i + w(v_i,v_j)} ,如果 u_j < u_i + w(v_i,v_j),lamda_j = i ,否则 lamda_j 不变;否则转Step4。
Step4:u_k = min{u_j} ,v_j 属于 T,j = i + 1,…,n - 1, 如果 u_k = +无穷,则结束,起点到各点没有最短路径;否则转Step5;
Step5:S = S 并 {v_k},i = k , T 中删除 v_k;若 T 中已无元素,则结束,此时已求出起点到任意结点的最短路径;如果 v_k 是路径终点,则找到,结束;否则转step3。

算法结果

v_i 的最短路径: lamda_i, lamda_i-1,…, lamda_0 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP32 I2S音频总线学习笔记(一):初识I2S通信与配置基础

文章目录 简介为什么需要I2S&#xff1f;关于音频信号采样率分辨率音频声道 怎样使用I2S传输音频&#xff1f;位时钟BCLK字时钟WS串行数据SD I2S传输模型I2S通信格式I2S格式左对齐格式右对齐格式 i2s基本配置i2s 底层API加载I2S驱动设置I2S使用的引脚I2S读取数据I2S发送数据卸载…

Eclipse中引入NS3项目

参考资料&#xff1a; 博主&#xff1a;深度不睡觉 NS3的3.36版本将Eclipse作IDE_ns3使用eclipse-CSDN博客 从1.2安装eclipse开始 其中参考教程中省略的几点&#xff1a; 1.下载解压tar包 mkdir /Tools/Eclipse/EclipseTool # 新建目录 tar -zxvf /path/to/eclipse-cpp-20…

机器学习周报-TCN文献阅读

文章目录 摘要Abstract 1 TCN通用架构1.1 序列建模任务描述1.2 因果卷积&#xff08;Causal Convolutions&#xff09;1.3 扩张卷积&#xff08;Dilated Convolutions&#xff09;1.4 残差连接&#xff08;Residual Connections&#xff09; 2 TCN vs RNN3 TCN缺点4 代码4.1 TC…

Quartz任务调度框架实现任务动态执行

说明&#xff1a;之前使用Quartz&#xff0c;都是写好Job&#xff0c;指定一个时间点&#xff0c;到点执行。最近有个需求&#xff0c;需要根据前端用户设置的时间点去执行&#xff0c;也就是说任务执行的时间点是动态变化的。本文介绍如何用Quartz任务调度框架实现任务动态执行…

Spring-kafka快速Demo示例

使用Spring-Kafka快速发送/接受Kafka消息示例代码&#xff0c;项目结构是最基础的SpringBoot结构&#xff0c;提前安装好Kafka&#xff0c;确保Kafka已经正确启动 pom.xml&#xff0c;根据个人情况更换springboot、java版本等 <?xml version"1.0" encoding&qu…

【C++】B2079 求出 e 的值

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目介绍输入格式输出格式输入输出样例说明/提示 &#x1f4af;实现方法一&#xff1a;单层 for 循环计算代码实现运行逻辑解析优点不足 &#x1f4af;实现方法二&#xff…

STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计

SMEC88ST SDK卡发包下载 目前市场上很多嵌入式产品方案都是可以破解复制的&#xff0c;主要是因为方案主芯片不具备防破解的功能&#xff0c;这就导致开发者投入大量精力、财力开发的新产品一上市就被别人复制&#xff0c;到市场上的只能以价格竞争&#xff0c;最后工厂复制的产…

windows 下通过脚本方式实现 类似 Linux keepalived IP 动态绑定效果

基本信息: VIP: 10.50.1.170 node1: 10.50.1.171 node2: 10.50.1.172 实现原理: 1. 脚本每2s 运行一次(注册为windows 服务, 开机同步启动) 2. 监听VIP 是否可用, 可用则跳过; 3. 如果不可用 则 判断本机 Nginx 服务是否可用 3.1 可用则执行绑定动作, 将VIP绑定到本机 …

嵌入式工程师面试题--0X06

1、C语言头文件的工作原理。 C语言头文件的工作原理涉及到定义、包含方式、预处理阶段、避免重复包含以及分类等多个方面。 2、精度和分辨率有什么区别&#xff1f; 精度&#xff08;Precision&#xff09; 定义&#xff1a;精度通常指测量或计算结果与真实值之间的接近程度…

精准识别花生豆:基于EfficientNetB0的深度学习检测与分类项目

精准检测花生豆&#xff1a;基于EfficientNet的深度学习分类项目 在现代农业生产中&#xff0c;作物的质量检测和分类是确保产品质量的重要环节。针对花生豆的检测与分类需求&#xff0c;我们开发了一套基于深度学习的解决方案&#xff0c;利用EfficientNetB0模型实现高效、准…

MarkItDown的使用(将Word、Excel、PDF等转换为Markdown格式)

MarkItDown的使用&#xff08;将Word、Excel、PDF等转换为Markdown格式&#xff09; 本文目录&#xff1a; 零、时光宝盒&#x1f33b; 一、简介 二、安装 三、使用方法 3.1、使用命令行形式 3.2、用 Python 调用 四、总结 五、参考资料 零、时光宝盒&#x1f33b; &a…

【Unity Shader】【图形渲染】 Shader数学基础14:裁剪空间

在计算机图形学中,裁剪空间(Clip Space)是一个至关重要的概念,它是物体从世界空间到最终屏幕显示的一个中间步骤。本文将详细探讨裁剪空间的基本原理、投影矩阵的作用,以及如何通过透视投影和正交投影来确定裁剪空间。 什么是裁剪空间? 裁剪空间(Clip Space)也称为齐…

Qanything 2.0源码解析系列6 PDF解析逻辑

Qanything 2.0源码解析系列6: PDF解析逻辑 type: Post status: Published date: 2024/12/04 summary: 深入剖析Qanything是如何拆解PDF的,核心是pdf转markdown category: 技术分享 原文:www.feifeixu.top 😀 前言: 在前面的文章中探究了图片是怎么进行解析的,这篇文章对…

【Agent】Chatbot、Copilot与Agent如何帮助我们的提升效率?

人工智能&#xff08;AI&#xff09;技术的迅猛发展正在深刻改变我们的生活和工作方式。你是否曾想过&#xff0c;未来的工作场景会是什么样子&#xff1f;AI的崛起不仅仅是科技的进步&#xff0c;更是我们生活方式的革命。今天&#xff0c;我们将深入探讨三种主要的AI能力&…

如何使用python读写游戏内存以及使用特征码匹配基址

一.读写内存所需的基本参数 接下来我将使用GTA5游戏举例 1.通过进程名称获取进程pid from psutil import process_iterdef get_process_id_by_name(process_name):for process in process_iter(["pid", "name"]):if process.info["name"] pr…

简述css中z-index的作用?如何用定位使用?

z-index是一个css属性&#xff0c;用于控制元素的堆叠顺序&#xff0c; 如何使用定位用index 1、position&#xff1a;relative&#xff1b; z-index&#xff1b; 相对于自己来定位的&#xff0c;可以根据top&#xff0c;bottom&#xff0c;right&#xff0c;left&#xff…

Playwright爬虫xpath获取技巧

示例一 <button class"MuiButtonBase-root MuiButton-root MuiLoadingButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeLarge MuiButton-containedSizeLarge MuiButton-colorPrimary MuiButton-fullWidth MuiButton-root MuiLoadingButton…

Java中处理if-else的几种高级方法

前言 在我看来多写几个if-else没啥大不了的&#xff0c;但是就是看起来没啥逼格&#xff0c;领导嫌弃。我根据开发的经历写几个不同的替代方法 一、枚举法替代 我先前写了一篇文章&#xff0c;可以去看看。 通过枚举替换if-else语句的解决方案_枚举代替if else c语言-CSDN博…

CCNP_SEC_ASA 第六天作业

实验需求&#xff1a; 为保障内部用户能够访问Internet&#xff0c;请把10.1.1.0/24网络动态转换到外部地址池202.100.1.100-202.100.1.200&#xff0c;如果地址池耗尽后&#xff0c;PAT到Outside接口 提示&#xff1a;需要看到如下输出信息 Inside#telnet 202.100.1.1 Trying …

计算机网络 (13)信道复用技术

前言 计算机网络中的信道复用技术是一种提高网络资源利用率的关键技术。它允许在一条物理信道上同时传输多个用户的信号&#xff0c;从而提高了信道的传输效率和带宽利用率。 一、信道复用技术的定义 信道复用&#xff08;Multiplexing&#xff09;就是在一条传输媒体上同时传输…