【茶话数据结构】查找最短路径——Dijkstra算法详解(保姆式详细图解,步步紧逼,保你学会)

news2024/11/24 4:22:47

 

 💯 博客内容:【茶话数据结构】查找最短路径——Dijkstra算法详解

😀 作  者:陈大大陈

🦉所属专栏:数据结构笔记

🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信!

💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

目录

题记 

两大注意事项

实例题目

超超超详细图解

 答案以及详尽总结

后记

题记 

 复习到离散数学图论时,想起来这个算法,感觉很有写博客的必要!今天这篇博客就来讲一下查找最短路径的Dijkstra算法。

Dijkstra 算法,是由荷兰计算机科学家 Edsger Wybe Dijkstra 在1956年发现的算法,戴克斯特拉算法使用类似广度优先搜索的方法解决赋权图的单源最短路径问题。Dijkstra 算法原始版本仅适用于找到两个顶点之间的最短路径,后来更常见的变体固定了一个顶点作为源结点然后找到该顶点到图中所有其它结点的最短路径,产生一个最短路径树。本算法每次取出未访问结点中距离最小的,用该结点更新其他结点的距离。需要注意的是绝大多数的Dijkstra 算法不能有效处理带有负权边的图。

两大注意事项

需要注意两个问题

1.每次从未标记的节点中选择距离出发点最近的节点,标记它,收录到最短路径集合中。

2.计算刚加入的节点A的临近节点B的距离(不包含标记的节点),若(节点A的距离+节点B的距离到节点B的边长)<节点B,就更新节点B的距离和其前一个位置的点。

实例题目

 如图,计算从起点0到终点4的最短路径长度。 

超超超详细图解

 我们作出这样的表格,用于施展Dijkstra算法。

出发点表示从出发点到现在位置地距离。

首先从距离出发点最近的点,也就是出发点开始,它距离出发点的位置显然是0,。

标记它,并收录到最优路径集合中,我们用一个对钩来表示已被收录。

 下一步就是找它的临近节点,分别是1和7。

更新1和7的出发点距离和前面点,如图。

 紧接着从没有被标记的节点中选出出发点距离最短的,即为1,标记它,并收录到最短路径集合中。

 

紧接着计算它的邻接节点,即为7和2,因为0已经被标记所以不算。

计算出0和它们的距离分别是15和12,12小于默认的正无穷,更新。

15比8大,不更新。

 选出出发点距离最小的点,即为7,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,即为6和8,因为1和0已经被标记所以不算。

计算出0和它们的距离分别是9和15,小于默认的正无穷,更新。

 选出出发点距离最小的点,即为6,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,即为5和8,因为7已经被标记所以不算。

计算出0和它们的距离分别是11和15,11的更新,15的和之前相等,不更新。

  选出出发点距离最小的点,即为5,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,即为2,3和4,因为6已经被标记所以不算。

计算出0和它们的距离分别是15和25和21。

15大于12,不更新,25小于正无穷,更新,21小于正无穷,更新。

 选出出发点距离最小的点,即为2,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,即为3和8,因为1和5已经被标记所以不算。

计算出0和它们的距离分别是19和14,分别小于25和15,都更新。

 选出出发点距离最小的点,即为8,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,全都标记过了,最方便的一集,小时候写哭了。

直接标记后跳过。

 选出出发点距离最小的点,即为8,标记它,并收录到最短路径集合中。

 

紧接着计算它的邻接节点,就剩下一个4没被标记了。

计算出距离它的距离是28,大于21,不更新。

最后一步将4标记,并收录到最短路径集合中。、

我们的最终答案堂堂出炉!!!

 答案以及详尽总结

从上面的表中可以得到答案,0到4的最短路径是21。

从头到尾经过的节点是 0 7 6 5 4。

其实需要注意的就这两点。 

1.每次从未标记的节点中选择距离出发点最近的节点,标记它,收录到最短路径集合中。

2.计算刚加入的节点A的临近节点B的距离(不包含标记的节点),若(节点A的距离+节点B的距离到节点B的边长)<节点B,就更新节点B的距离和其前一个位置的点。

后记

韩信带净化,成为大牛道阻且长,小僧还在山腰上。。。

博客里如果有问题的话,还请大佬私信我,我会修改的。

有问题的话请私信问我,我看到就会回的。 

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

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

相关文章

软考A计划-电子商务设计师-模拟试题卷一

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

chatgpt赋能python:Python抢票的绝招

Python 抢票的绝招 随着互联网技术的不断发展&#xff0c;越来越多的人开始享受网购的便利。但是&#xff0c;随着一些热门事件的到来&#xff0c;如演唱会、体育比赛等&#xff0c;大家面临同一个问题&#xff1a;如何抢到热门事件的门票&#xff1f;这时&#xff0c;Python …

Win10利用剪贴板多次粘贴

工作中需要经常复制粘贴图片&#xff0c;每次ctrl C, ctrl V来回切换效率很低 网上有很多剪贴板增强工具&#xff0c;但win10本身有增强版的功能 多次复制后&#xff0c;在需要粘贴的地方按下&#xff0c;Windows徽标 V&#xff0c;就会出现所有复制过的内容 需要哪个直接点…

2023/06/05 PM Day4 软件项目生存期和生命周期

视频参考地址&#xff1a; B站闫波软件项目管理视频学习. 视频资源&#xff1a;video P4-P6 本篇重点&#xff1a;项目生存期 简书日更计划同步记录&#x1f3c3;… 项目生命周期 软件项目生命周期 *项目生命周期的阶段 C概念/启动阶段&#xff1a;确立项目需求和目标D开发/计…

chatgpt赋能python:Python如何把数据存到字典

Python如何把数据存到字典 字典是Python中非常有用的数据类型之一&#xff0c;它允许您将值与唯一的键相关联&#xff0c;从而快速地查找、插入和删除数据。在这篇文章中&#xff0c;我们将介绍如何使用Python将数据存储到字典中。 什么是字典&#xff1f; 字典是Python中的…

[开发板]001瑞芯微3588s开发记录--装一个仿真环境

文章目录 前言1. 构建python环境2 模型转换 前言 我是一个开发板的新手&#xff0c;刚买了一个瑞芯微3588s的板子&#xff0c;目标是要学习嵌入式的开发&#xff0c;也就是说把深度学习的框架&#xff0c;跑到板子上。万丈高楼平地起步。先把仿真环境搭建起来。 仿真环境可以跑…

趣未来科技董事长黄婵娇:专注创新研发,把公司当做科研机构来运作!

身为研发型董事长&#xff0c;黄婵娇女士谈及“技术”&#xff0c;眼中总是透着由衷的自豪。她的办公室摆满了各类技术文件以及图纸&#xff0c;以身作则将技术研发基因带入公司核心运维&#xff0c;强势带动深圳市趣未来&#xff08;B2GO&#xff09;科技有限公司一步步成长为…

电赛备赛日记(一):K210与STM32串口通信

拖更了n久的备赛日记终于来啦&#xff0c;最近实现了关于K210图像识别并将所需数据&#xff08;即目标类别&#xff0c;目标在图像中的加权坐标&#xff09;其中&#xff0c;加权坐标指K210识别到的目标并框出的框的宽和高与框左上顶点的坐标加权&#xff0c;希望以此来判断目标…

海云捷讯杯 赛后总结 目标检测——缺陷检测(模型训练部分)

在这次比赛中&#xff0c;本人在队伍中主要负责模型训练部分&#xff0c;所以本文主要讲述如何使用PaddleDetection代码自定义数据集进行目标检测&#xff0c;欢迎大家纠错讨论哦&#xff0c;不胜荣幸~ 参考项目&#xff1a; SSDquexianjiance - 飞桨AI Studio (baidu.com) 感…

云上高校导航

2023042719 - 云上高校导航 中国大学生计算机设计大赛 广西赛区 软件应用与开发 - 移动应用开发&#xff08;非游戏类&#xff09; 三等奖 “云上高校导航”是一套基于小程序云开发的校园导航类系统开发方案。 该开发方案可供开发者进行二次开发&#xff0c;用于解决师生和访客…

MySQL数据库理论基础

数据库-理论基础 1.什么是数据库2.数据库管理系统(DBMS)3.数据库与文件系统的区别4.数据库的发展史5. 常见数据库5.1 关系型数据库5.2 非关系型数据库 6.MySQL简介7. MySQL的特性8.MySQL获取9.MySQL在企业中应用10.MySQL体系结构 1.什么是数据库 数据&#xff1a; 描述事物的符…

Linux 高级篇-定制自己的Linux 系统

Linux 高级篇-定制自己的Linux 系统 基本介绍 通过裁剪现有Linux 系统(CentOS7.6)&#xff0c;创建属于自己的min Linux 小系统&#xff0c;可以加深我们对linux 的理解。利用centos7.6&#xff0c;搭建一个小小linux 系统, 很有趣。 基本原理 启动流程介绍&#xff1a; 制…

LeetCode25. K 个一组翻转链表

给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值…

操作系统之IO管理

目录 IO设备的概念和分类 IO控制器 IO控制方式 IO软件层次结构 IO应用程序接口和驱动程序接口 IO核心子系统 假脱机技术 IO设备的分配和回收 缓冲区管理 磁盘的结构 磁盘调度算法 磁盘的管理 固态硬盘 本文内容摘自&#xff1a;5.1_1_I-O设备的概念和分类_哔哩哔哩…

cookie 和 session 的恩恩怨怨

目录 cookie 1. Cookie 从哪里来? 2. Cookie 到哪里去? 3. Cookie 有啥用? Session Session 中的常用方法 模拟实现一个登录页面: session 和 cookie 的最官方的恩恩怨怨 cookie Cookie 是浏览器在本地存储数据的一种机制 1. Cookie 从哪里来? Cookie 从服务器…

chatgpt赋能python:Python如何将两张图片横向拼在一起

Python如何将两张图片横向拼在一起 在网页设计中&#xff0c;有时候需要将两张图片横向拼在一起来达到更好的展示效果。本文将介绍如何使用Python实现这一功能。 前置知识 在使用Python进行图像处理之前&#xff0c;先了解以下几个库&#xff1a; Pillow&#xff1a;Python…

chatgpt赋能python:Python如何取非

Python如何取非 Python是一种强大的编程语言&#xff0c;可以用于许多不同的任务&#xff0c;包括搜索引擎优化&#xff08;SEO&#xff09;。在这篇文章中&#xff0c;我们将重点介绍Python如何取非&#xff0c;这对于SEO优化非常重要。 什么是取非&#xff1f; 在SEO中&am…

chatgpt赋能python:Python如何手动安装包:技术向SEO文章

Python如何手动安装包&#xff1a;技术向SEO文章 虽然大多数Python用户都习惯使用pip来安装和管理包&#xff0c;但手动安装包是必要的技能之一。这篇文章将介绍如何使用Python的标准方法手动安装包&#xff0c;并提供实际的指导。 为什么要手动安装包&#xff1f; 有时候&a…

达梦数据库读写分离集群搭建

目录 说明... 3 前期准备... 4 开始搭建读写分离... 5 一、主库200. 5 1、卸载原实例... 5 2、创建新的实例... 6 3、配置主库200. 6 4、启动主库... 8 5、设置OGUID.. 8 二、配置2台备库... 9 1、创建新的实例... 9 2、备份恢复&#xff08;初始化实例后应该先备份…

VS2012编译VTK7.1.1库,使用VTK加载显示STL图像

文章目录 cmake配置项目编译VTK库代码测试报错:no override found for vtkpolydata下载VTK库下载地址,下载VTK源码 https://vtk.org/download/ 需要工具 1.VS2012 2.CMAKE 官网 https://cmake.org/ cmake配置项目 下载后的vtk7.1.1库解压 安装好cmake,打开cmake-gui,在whe…