最短路径的典型用途:

交通网络的问题——从甲地到乙地之间是否有公路连通?

在有多条通路的情况下,哪一条路最短?

交通网络用有向网来表示:顶点——表示地点——表示两个地点有路连通,弧上的权值——表示两地点之间的距离、交通费或途中所花费的时间等。

如何能够使一个地点到另一个地点的运输时间最短或运费最省?这就是一个求两个地点间的最短路径问题。

问题抽象:

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

最短路径与最小生成树不同,路径上不一定包含n个顶点,也不一定包含n - 1条边

第一类问题是求两点间的最短路径:下图是两点间的距离,求最短路径,比如是从V1到V7,我们将所有可能的路径一一罗列并求权值之和,比较大小

第二类问题是求某源点到其他个点的最短路径:此时源点是任取的,看你想要哪个作为起点

下图中,比如由V0到V4的最短路径,有两条,一条是V0-V2-V3-V4=8+5+6=19,还有一条是V0直接到V4,权值是30,很明显19更小,所有19填入表中,以此类推,不再赘述

两种常见的最短路径问题:

一、单源最短路径:用Dijkstra(迪杰斯特拉)算法

二、所有顶点间的最短路径:用Floyd(弗洛伊徳)算法

接下来我们来分析迪杰斯特拉算法

如下图表,i=1所在的列,是指的V0到其他所有顶点的权值,如果没有直达的边(一条),记为∞

1.从VO到V1,权值为13,所以我们在V1所在行的第一个表格上填13,V0到V2权值为8,所以在V2所在行第一个表格填8,以此类推,V0到V4为30,V0到V6为32,其余填∞

2.找出填好的这一列(i=1所在的列)最小的权值,填到距离那行,也就是权值为8最小,对应的是V2,将V2填入Vj那一行,于是V2所在行划去,因为我们已经找到到达V2的最小距离

3.接着,从V0和VO-V2出发,继续寻找最短路径,V0-V1依然不变是13,而V0-V2到V3,权值为8+5=13,除此之外无从V0/V2出发的路径能到达V3,所以V3的值改为13,V4没有V0-V2能直接到的边(就是走一条边就能到),所以依然是30不变,以此类推

4.我们发现,此时13是最小路径,把第一个13(V1)放入距离和Vj中,划去V1所在行,此后不再需要比较V1和V2的路径

以此类推,不再赘述

弗洛依德 (Floyd) 算法思想: 

逐个顶点试探 ,从 Vi到 Vj 的所有可能存在的路径中 ,选出一条长度最短的路径

我们一 一分析一下这道题

从A->B,权值是4,A->C是11,以此类推,主对角线均为0(因为A到A,B到B,C到C均无边)

加入A的意思是,比如从B到C,那加入A就是B-A-C的路径,是6+11=17>2,所以BC不动

分析C到B,加入A就是CAB=3+4=7<∞,所以改为7

加入B,我们分析A到C,ABC=4+2=6<11,所以改为6

分析C到A,CBA,C没有直接到B的,所以不必改

加入C,我们分析BA,B-C-A=2+3=5<6,所以改为5

总结:加入谁,谁所在的行先不变,对角线永远是0

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

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

相关文章

【qt5_study】1.Hello world

模板 作为初学者我们选择第一个Application(Qt)和 Qt Widgets Application,所谓的模板就是 Qt为了方便开发程序,在新建工程时可以让用户基于一种模板来编写程序,包括 cpp文件, ui文件都已经快速的创建,而不用用户手动创建这些文件。 基类 这里默认选择的基类为 QMainWin…

项目构想|文生图小程序

Date: August 4, 2025项目介绍 &#x1f44b;&#xff0c;我们通过 Vibe Coding 做一个文字生成图片的小程序。 我们会从需求分析、技术选型、UI设计、项目构筑到最后打包&#xff0c;一路尝试 Vibe Coding 实现。 创建项目 创建文件夹&#xff1a;ai-pic-mini-app 采用 Git 进…

TiDB/MongoDB/Taosdb存储引擎概览

数据库类型存储引擎数据结构源码位置tidbRockDBLSM树https://github.com/facebook/rocksdbmongodbWiredTigerB 树/LSM树https://github.com/wiredtiger/wiredtigerTDengineTSDBBRINhttps://github.com/taosdata/TDengine 1、tidb存储引擎概览 LSM树数据结构描述LSM树(Log Str…

qt窗口--01

文章目录qt窗口--01窗口概览菜单栏工具栏状态栏浮动窗口子窗口对话框model结语很高兴和大家见面&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01;&#xff01; 作者&#xff1a;٩( ‘ω’ )و260 我的专栏&#xff1a;qt&#xff0c;Li…

Neo4j 社区版 Mac 安装教程

最近用到了nebulagraph图数据库做金融反欺诈项目&#xff0c;虽然nebula属于分布式架构&#xff0c;但依然感觉nebula使用不太顺手&#xff0c;这里顺便研究一下neo4j这款数据库如何&#xff0c;这里先从安装开始&#xff1f; 一、 准备工作 确认 Java 版本要求&#xff1a; N…

Android Studio(2025.1.2)Gemini Agent 使用指南

Android Studio&#xff08;2025.1.2&#xff09;Gemini Agent 使用指南 文章目录Android Studio&#xff08;2025.1.2&#xff09;Gemini Agent 使用指南1. 什么是 Gemini Agent&#xff1f;2. 如何启用和配置 Gemini Agent2.1 获取 API Key2.2 在 Android Studio 中配置3. 实…

计算机视觉--opencv(代码详细教程)

在计算机视觉的广袤领域中&#xff0c;OpenCV 是一座极为关键的里程碑。无论是在前沿的学术研究&#xff0c;还是在蓬勃发展的工业界&#xff0c;OpenCV 凭借其强大的功能与高效的性能&#xff0c;为开发者提供了丰富的图像处理和计算机视觉算法&#xff0c;助力无数项目落地。…

Centos6停止服务后yum改用阿里云

环境: OS:Centos 6.9 1.进入到yum配置目录 cd /etc/yum.repos.d 2.备份 cp CentOS-Base.repo CentOS-Base.repo.bk 3.下载 wget -O CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo 问题1: 因为Centos-6早就停止了更新维护&#xff0c;阿里云镜像网站将其仓库…

putty+Xming(XLaunch) 远程登录VirtualBox中的Ubuntu24.04,显示图形化(GUI)界面

测试环境&#xff1a;VirtualBox 7,Ubuntu24.04 desktop,Ubuntu24.04 Server(no desktop)&#xff0c;均测试成功。 一、先测试putty远程登录VirtualBox中的Ubuntu&#xff0c;可以使用ssh、Telnet 等协议。参见拙文《ssh连接VirtualBox中的Ubuntu24.04&#xff08;win11、put…

SpringBoot微头条实战项目

一、项目概述 微头条是一个基于现代技术栈构建的新闻发布和浏览平台&#xff0c;旨在为用户提供便捷的新闻阅读体验和高效的新闻管理功能。该项目通过前后端分离的架构设计&#xff0c;实现了用户注册、登录、新闻浏览、搜索、发布、修改和删除等功能&#xff0c;同时通过JWT技…

如何给电脑换个ip地址?电脑换ip几种方法

更换电脑的IP地址的方法取决于你的具体需求和网络环境&#xff08;是换本地局域网IP还是换对外公网IP&#xff09;。以下是几种常见的方法&#xff1a; 一、更换本地局域网IP地址&#xff08;在同一个网络内&#xff09; 这个IP地址通常由你的路由器&#xff08;或公司的网络管…

Pytest项目_day04(Python做接口请求)

Requests包 在python中&#xff0c;可以使用requests包&#xff0c;用于做接口请求和接口测试request支持http和https简单的get函数调用如下&#xff1a;r.jsonr.status_coder.textget函数的带params用法post函数的带params用法 post也可以和get一样在url中传入参数在requests包…

Flink与Kafka核心源码详解-目录

Flink是Apache软件基金会下开源的分布式流批一体计算框架&#xff0c;具备实时流计算和高吞吐批处理计算的大数据计算能力。本专栏内容为Flink源码解析的记录与分享。 本文解析的Flink源码版本为&#xff1a;flink-1.19.0 以下为Flink-1.19.0-完整源码详解的目录导航。 Flink-…

【VLLM篇】:原理-实现

1、VLLM vLLM是一个建立在【PagedAttention】之上的高吞吐的【分布式服务引擎】&#xff0c;目标是【提高吞吐量】、【提高内存利用率】&#xff08;kv-cache内存利用率高达96%&#xff09;&#xff0c;它的内存管理分配方式从【固定分配】改进为【分页管理】&#xff0c;类似操…

什么是 TcpCommunicationSpi

&#x1f9e9; 一、核心定位&#xff1a;什么是 TcpCommunicationSpi&#xff1f; /*** <tt>TcpCommunicationSpi</tt> is default communication SPI which uses* TCP/IP protocol and Java NIO to communicate with other nodes.*/翻译&#xff1a;TcpCommunicat…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 词云图-微博评论用户词云图实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解词云图-微博评论用户词云图实现 视频在线地…

数据结构----栈和队列认识

目录 栈&#xff08;后进先出&#xff09; 栈的实现 头文件 初始化 入栈 注意&#xff1a; bool 判空 出栈----栈顶 注意 出栈顶元素&#xff0c;元素不会删除 注意&#xff1a; 获取栈中有效个数 销毁栈 源文件操作 用栈实现递归* 队列&#xff08;先进先出&a…

【Kafka系列】第二篇| Kafka 的核心概念、架构设计、底层原理

在大数据和分布式系统飞速发展的今天&#xff0c;消息队列作为高效的通信工具&#xff0c;在系统解耦、异步通信、流量削峰等方面作用显著。 而 Kafka 这款高性能、高吞吐量的分布式消息队列&#xff0c;在日志收集、数据传输、实时计算等场景中应用广泛。 接下来&#xff0c;我…

Kafka-exporter采集参数调整方案

#作者&#xff1a;张桐瑞 文章目录1 问题概述2 修改方案2.1修改参数2.2配置示例3 消费者组均分脚本3.1使用说明3.2脚本内容3.3实现原理说明4 KAFKA-EXPORTER流程代码4.1KAFKA-EXPORTER拉取数据流程1 问题概述 由于kafka-exporter获取kafka指标时间过长&#xff0c;无法通过cur…

AT32的freertos下modbus TCP移植

1.准备模板 打开雅特力官网&#xff0c;也就是带有LwIP的示例。 下载官方源码&#xff1a;modbus 2.移植 我这里是在这里新建两个文件夹&#xff0c;分别是modbus与port&#xff0c;这个任意&#xff0c;只需要将必要的文件加入项目即可。 将源码中的modbus这些都移植过来&a…