图的应用---最短路径

news2024/10/1 17:24:09

目录

一. 前言

二. Dijkstra算法

三. Floyd算法


一. 前言

        所谓最短路径:就是在有向网当中,A点(源点)到达B点(终点)的多条路径中,寻找一条各边权值之和最小的路径,即最短路径

        如果是求解一个顶点到其他所有顶点的最短路径,就可以使用Dijkstra(迪杰斯特拉)算法

如果是求解所有顶点间的最短路径就可以使用Floyd(弗洛伊德)算法。

二. Dijkstra算法

        算法的操作原理如下所示:

 总的来说,Dijkstra算法就是需要设置一个顶点集U,里面刚开始包括一个初始顶点,然后设置一个最短路径表,从这个初始顶点出发,如果是邻接的顶点那么此时的源点到这个顶点的最短路径就是它们边上的权值,否则权值都为无穷大。然后在这些最短路径中选择一条权值最短的,把对应的顶点加入到顶点集U中,接着更新最短路径表,看看因为加入了新的顶点作为中间顶点之后,最短路径有没有发生改变。

举个例子如下所示:

如上所示,有一个这样的有向网,将v0作为源点加入到顶点集U中,然后求它到其他顶点的最短路径,到v1为13,到v2为8,到v3为无穷大,到v4为30,到v5为无穷大,到v6为无穷大。由于这里面路径的权值最小的是到v2的路径,所以将v2加入顶点集U中,然后更新最短路径表如下所示:

因为加入v2之后,v0这个源点到v3的最短路径就不再是正无穷大了,而是可以通过v2到达,最短路径为13。其它的最短路径暂时还没改变。继续上面的操作,可以得到最终的结果如下所示:

已经加入到顶点集中的顶点,最短路径就不会发生改变了,因此就是一条长方形状的封条。

三. Floyd算法

        该算法求解所有顶点到其它顶点的最短路径的操作步骤如下所示:

举个例子,有这样的有向网:

 

假设有向网中有n个顶点,那么它的最短路径表就是一个n*n的矩阵。例如这里有三个顶点,那么它的最短路径表第一行第一列就是从A到A,因此我们可以得到一个性质,那么就是该矩阵上对角线上的值都为0。初始时,从A到B的最短路径为4,从B到A的最短路径为6,其他顶点也是类似的求法,所以我们得到一个初始的所有顶点到其它顶点的最短路径表如下所示:

对应的顶点为:

 

其中AB也就是从A到B的最短路径,为4。

Floyd算法的核心就是增加中间顶点来试探,看有没有加入中间顶点后,顶点的最短路径发生改变。例如我们这里加入A,那么从C到B的最短路径就不再是正无穷大,而是可以通过A到达,也就变成了3+4=7.同理加入B和C的情况,如下所示:

 

最后使用Floyd算法的结果也就是当加入最后一个中间结点后的结果,这里总共有三个结点,所以加入C之后的最短路径矩阵也就是最后的结果。 

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

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

相关文章

Linux--TCP协议

传输层协议TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,会对数据的传输进行一个详细的控制。 TCP协议段格式 TCP协议段格式是TCP协议在网络传输数据时所使用的结构单…

Google paly开发者账号因恶意软件被封,也能申诉成功?怎么做?

想必在Google Play上摸爬滚打多年的各位开发者,在面对谷歌那似乎越来越严格的审核机制,都遭遇过应用被下架、账号被封的困境。 尤其是当你的应用被莫名其妙地判定为恶意软件,然后账号被封,更是让人头疼不已。 但别急,虽…

flutter开发环境搭建与android studio 安装配置

flutter开发环境搭建与android studio 安装配置 安装 android studio 下载安装 Android Studio 开发工具 Android Studio官网安装的时看到配置路径就换成自己其他盘的路径即可,其他的一路下一步就ok安装完毕,运行打开缺少 android sdk 按照提示下载即可…

python nicegui实现TodoList应用案例

参考: https://nicegui.io/ https://nicegui.io/#demos 版本 nicegui 1.4.30代码: python todolist.py from nicegui import ui from typing import List import jsonclass Todo:def __init__(self, text: str, completed: b…

连载|浅谈红队中的权限维持(六)-Linux 主机后门与Linux 隐藏文件

本文来源无问社区,更多实战内容,渗透思路可前往查看http://www.wwlib.cn/index.php/artread/artid/11584.html 0x01 Linux 主机后门 1、添加用户 一句话添加用户 useradd test;echo -e "123456n123456n" |passwd test 或者使用 openssl …

测试——Selenium

内容大纲: 什么是自动化测试 什么是Selenium Selenium工作原理 Selenium环境搭建 Selenium API 目录 1. 什么是自动化测试 2. 什么是Selenium 3. Selenium工作原理 4. Selenium环境搭建(java) 5. Selenium API 5.1 定位元素 5.1.1 CSS选择器定位元素 5.1.2 XPath定位元…

arr的谜思

arr到底是个啥? 在C语言中,arr 本身不是一个指针,而是一个数组名。然而,在大多数表达式中,数组名会被转换为指向数组首元素的指针。这种转换是自动的,并且是C语言的一个基本特性。 具体来说,当…

LDR6020快充线,科技与便捷的新宠

在快节奏的现代生活中,充电效率成为了我们不可忽视的一个重要因素。随着智能手机、平板电脑等电子设备的普及,快充线以其独特的优势逐渐成为充电设备市场的新宠。 快充线,相比于传统的普通充电线,快充线在充电速度上有着显著的提升…

Linux用户-sudo命令

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注我,我尽量把自己会的都分享给大家,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux是一个多用户多任务操作系统,这意味着它可以同时支持多个用户登录并使用系统。…

明日周刊-第19期

演唱会现场的感受确实跟耳机里的感觉非常不一样,听见音响和人声真真切切出现在你身边,那种震撼可以让你暂时忘却生活的烦恼。感谢8月3日的蔡健雅演唱会,凑巧的是这一场是今年巡演的最后一场。 文章目录 资源分享言论歌曲推荐 资源分享 nginx…

DC-8靶机通关

今天我们来学习DC-8这个靶机!!! 1.实验环境 攻击机:kali2023.2 靶机:DC-8 2.1主机扫描 2.2端口扫描 还是熟悉的配方!!! 3.1查看网页 其实可以先尝试一下爆破,但是爆…

在VScode中导入conda环境的记录【原创】

今天在vscode编辑器中运行一个python代码,发现终端可以运行,但是编辑器中点击Run会显示缺包,但是python包明明是有的,在自己的conda环境中。后来发现,是vscode没有发现我自己创建的conda环境,在vscode中导入…

暑假第三周——学生管理系统仿写

iOS学习 前言账号界面主页添加学生信息:修改学生信息:删除学生信息:学生信息排序:查找学生信息 总结 前言 学生管理系统的仿写较为简单,与c语言的学生管理系统逻辑上相差不大。 账号界面 账号界面与3G share的相同&am…

推荐几款卓越的 .NET 开源搜索组件

目录 前言 一、Lucene.NET 1、介绍 2、地址 二、Elasticsearch.NET 和 NEST 1、介绍 2、文档地址 3、开源地址 三、Algolia.Search 1、介绍 2、文档地址 3、开源地址 四、SolrNet 1、介绍 2、文档开源地址 3、Solr社区 五、Masuit.LuceneEFCore.SearchEngine …

网页设计师必备!10个免费的设计素材网站推荐

当网页设计师使用网页设计材料时,他们会优先考虑那些免费和高质量的网页设计材料网站。找到一个免费和高质量的网页设计材料网站并不容易,有些网站要么需要打开材料网站成员,要么设计材料质量很差。即时设计总结了10个免费的网页设计材料网站…

iAppv3无白银会员使用SDK

前言 一个实用小技巧分享给大家。 工具 iapp:百度或点我获取 Mt管理器:百度或点我获取 教程 1.移出“项目路径/apk/lib/”内的全部文件 2.在iapp内测试打包,打包完成后直接返回,不要安装 3.在mt管理器里面点击“项目路径/b…

常见CMS漏洞(WordPress、DeDeCMS、ASPCMS、PHPMyadmin、Pageadmin)

目录 一:WordPress 步骤一:进入Vulhub靶场并执行以下命令开启靶场;在浏览器中访问并安装好子... 步骤二:思路是修改其WP的模板写入一句话木马后门并访问其文件即可GetShel;登陆WP后点击【外观】--》【编辑】 --》 404.php 步骤三:访问以下连接即可获取WebShel...…

【Linux】wsl win安装Linux环境

文章目录 wsl是什么配置wsl启用适用于 Linux 的 Windows 子系统安装 Linux 分发版 文件互操作参考文章 win 下安装linux其实很简单,百度一下wsl就明白了 wsl是什么 WSL(Windows Subsystem for Linux)是微软开发的一项技术,允许用…

七、分散加载说明

分散加载说明以GD32F103ZE为例,分别用Keil、IAR和Embedded Builder工具实现:将函数放置某个地址、将常量放置某个地址、将函数放在RAM中运行的三种效果。 1、将led_toggle()函数放在0x08040000地址后。 2、将tempbuf[1024]常量放在0x08020000地址后。 …

React管理系统整合Cesium避坑指南

花费了一周时间将React 升级到了最新版本18,同时整合Cesium三维模块到系统中,其中遇到了react 版本升级后模块删改,按照原来的引入方式无法使用的问题,以及Cesium 放入子路由一直404等问题 文章目录 一、系统版本依赖二、系统预览…