最短路径——Floyd算法、Dijkstra算法(未完...)

这里写目录标题

  • 例题引入: 路径——蓝桥2021省赛
  • 题目分析
  • 题解
  • !!!求最短路径问题!!!
    • 应用场景
    • 图的基础
    • Floyd算法
      • Acwing-843.有边数限制的最短路
      • 简单的思路讲解
    • Dijkstra算法

例题引入: 路径——蓝桥2021省赛

在这里插入图片描述

题目分析

  • 求最短路径
  • 求最小公倍数

题解

!!!求最短路径问题!!!

  • 求最短路径—》会想到什么解题思路?
  • 我最先想到的是:dfs和bfs(最短路径,这俩求解肯定没问题)
  • 然后我又想到了dp(动态规划):因为有初始状态和最后一步(求两点之间的最短路径)。那我要是用dp[i]表示到i点的最短路径,有没有可能写出状态转移方程呢?
    但因为我知道最短路径问题有现成的算法去解题,所以,先学一下吧。
    至于dp能不能解的出来,怎么解,之后有时间回来研究

应用场景

  • 管道铺设,线路安装,地图规划等路径问题
  • 例:
    • 旅行规划:想知道任意两个城市之间的最短路径——用Floyd算法

图的基础

时间来不及,先整个大纲。之后会补充 重点先放在两个算法上

  • 图的基本概念(可对应好友关系)
    • 顶点:用户
    • :俩用户是好友,那俩人之间就有一条边连着
    • :某用户的好友数量。有向图中,还分入度(指进来的)和出度(指出去的)
    • 无向图和有向图
      • 无向图:没箭头的图(不关注指哪)
      • 有向图:有箭头的图(关注二者间关系的)
    • 无权图和有权图
      (权就是指,俩人的亲密度)
      • 无权图:没数字的(不关注关系的亲密度)
      • 有权图:有数字的(关注俩人的亲密度)

这是一个带权的有向图(图片来自:JavaGuide)

在这里插入图片描述

  • 图的存储
    存一个图最简单的方式就是——存到一个二维数组里(优点:找顶点间关系高效;缺点:费空间)

像这样(图片来自:JavaGuide)

在这里插入图片描述

Floyd算法

Acwing-843.有边数限制的最短路

给定一个n个点m条边的有向图,图中可能存在重边和自环,

简单的思路讲解

求任意两点间的最短路径问题(如图)

在这里插入图片描述

  • 先来想
  • 假设我们要求顶点1到顶点3间的最小路径 首先,1到3 自己就有一条权值为6的路径
  • 然后,通过图 可以很明显的知道,1到3,可以通过在顶点2中转 到达,其路径值为2+3=5;
  • 而5<6 这时,需要更新1到3的最短路径为5

归纳一下:

  • 在找任意两点间的最短路径时,显然是不仅要找直接路径,还要找从中转点到达的路径,比较之后,才能得出两点间的最短路径
  • 而中转点基本上都不止一个—》怎么有逻辑的给他表示出来呢?
  • 我们来推一下
  • 我们用e[n+1][n+1] 来存放这个图(因为for循环中用1~n比较好表示),其中,e[i][j] 表示i到j的最短路径
  • 假设现在只允许经过顶点1中转,求任意两点(i到j)的最短路径
    –》只需要判定e[i][1]+e[1][j] 是否比 e[i][j]小 即可
  • 怎么写
    //经过顶点1中转
//经过顶点1中转
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(e[i][j] > e[i][1]+e[1][j]){e[i][j] = e[i][1]+e[1][j];}

//同理,经过顶点1和顶点2中转呢?

//经过顶点1
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(e[i][j] > e[i][1] + e[1][j]){e[i][j] = e[i][1] + e[1][j];}	
//经过顶点2
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(e[i][j] > e[i][2] + e[2][j]){e[i][j] = e[i][2] + e[2][j];}

//同理,经过3,4顶点也是这样
//把他们合并到一块写

for(int k=1;k<=n;k++)	//依次经过1~n中的第k个点进行中转for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(e[i][j] > e[i][k] + e[k][j]){e[i][j] = e[i][k] + e[k][j];}

Dijkstra算法

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

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

相关文章

车载以太网AVB交换机 gptp透明时钟 8口 千兆/百兆可切换 SW1100TR

SW1100TR车载以太网交换机 一、产品简要分析 8端口千兆和百兆混合车载以太网交换机&#xff0c;其中包含2个通道的1000BASE-T1采用罗森博格H-MTD接口&#xff0c;5通道100BASE-T1泰科MATEnet接口和1个通道1000BASE-T标准以太网(RJ45接口)&#xff0c;可以实现车载以太网多通道…

Acrobat Pro DC 2023 for Mac PDF编辑管理软件

Acrobat Pro DC 2023 for Mac是一款功能强大的PDF编辑和管理软件&#xff0c;旨在帮助用户轻松处理PDF文件。它提供了丰富的工具和功能&#xff0c;使用户可以创建、编辑、转换和注释PDF文件&#xff0c;以及填写和签署PDF表单。 软件下载&#xff1a;Acrobat Pro DC 2023 for …

Matlab将日尺度数据转化为月尺度数据

日尺度转化为月尺度 clcclear all% load datadata xlread(data.xlsx) % 例如该数据为1961-01-01至2022-12-31&#xff0c;共计22645天data data(:,1:3) % 该数据有22645行&#xff0c;数据分别为降水&#xff0c;气温&#xff0c;湿度等三列dt datetime(1961-01-01):datatim…

一种调用所有LLM模型API的方式

公众号&#xff1a;【可乐前端】&#xff0c;每天3分钟学习一个优秀的开源项目&#xff0c;分享web面试与实战知识&#xff0c;也有全栈交流学习摸鱼群&#xff0c;期待您的关注! 每天3分钟开源 hi&#xff0c;这里是每天3分钟开源&#xff0c;很高兴又跟大家见面了&#xff0…

FDM3D打印系列——手涂水性漆和补土

大家好&#xff0c;我是阿赵。   继续探索FDM3D打印。这次要打印的是拳皇系列的经典角色&#xff0c;八神庵&#xff1a;   上次那个卢卡尔打印的尺寸有点小&#xff0c;为了配合着卢卡尔的高度&#xff0c;所以这次这个八神庵也打印的特别的小&#xff1a;   特别小的…

C语言 键盘输入与屏幕输出——数据的格式化屏幕输出

目录 顺序结构 C语言如何实现数据的输入和输出&#xff1f; 数据的格式化屏幕输出 printf&#xff08;&#xff09;格式字符 printf&#xff08;&#xff09;的格式修饰符 顺序结构 一般而言&#xff0c;顺序结构程序涉及如下三个基本操作&#xff1a; *输入数据 *处理数…

C++STLmap,set

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

什么是公网IP?

公网IP&#xff0c;即公开网络IP地址&#xff0c;是指在互联网中公开可见、可访问的IP地址。每个设备在连接互联网时&#xff0c;都需要一个唯一的公网IP地址&#xff0c;以便其他设备可以定位并与之通信。 尽管公网IP在网络通信中具有重要作用&#xff0c;但它也带来了一些安全…

在GitHub上上传项目(Idea)

repository创建好后&#xff0c;GitHub会提示相应的命令 在Idea的终端执行这些命令&#xff0c;就OK了 在GitHub上查看&#xff0c;已经上传成功

【Hello,PyQt】QTextEdit和QSplider

PyQt5 是一个强大的Python库&#xff0c;用于创建图形用户界面&#xff08;GUI&#xff09;。其中&#xff0c;QTextEdit 控件作为一个灵活多用的组件&#xff0c;常用于显示和编辑多行文本内容&#xff0c;支持丰富的格式设置和文本操作功能。另外&#xff0c;QSlider 控件是一…

JavaScript高级 —— 学习(二)

目录 一、深入对象 &#xff08;一&#xff09;创建对象三种方式 1.利用对象字面量创建 2.利用 new Object() 创建 3.利用构造函数创建 &#xff08;二&#xff09;利用构造函数创建对象 1.构造函数介绍 2.约定 3.实例化执行过程 &#xff08;三&#xff09;实例成员…

opengl草稿复习,承上启下(一)

目录 1、链接文件夹中的cpp 2、链接资源到输出目录 3、多编译目标 4、cmakelist添加库 4、添加glfw和glad 5、glfw运行 6、NDC、VBO、VAO 7、渐变三角形 8、渲染两个三角形 9、渲染两个三角形&#xff0c;同时基于原来颜色进行渐变 10、三角形渲染模块化 11、纹理渲…

Python API(happybase)操作Hbase案例

一、Windows下安装Python库&#xff1a;happybase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase&#xff0c;需要开启HBase的Thrift服务。所以&#xff0c;在Linux服务器上&#xff0c;执行如…

Kerberos 认证 javax.security.auth.logon.LoginException:拒绝链接 (Connection refused)

kerberos 服务重启之后异常 项目中用到了hive 和hdfs &#xff0c;权限认证使用了Kerberos&#xff0c;因为机房异常&#xff0c;导致了Kerberos 服务重启&#xff0c;结果发现本来运行正常的应用服务hive 和hdfs 认证失败&#xff0c;报错信息是 典型的网络连接异常 排查思路…

动手学机器学习初探机器学习+习题

初探机器学习 “两只手”代表的是人工智能可以做的两大类任务&#xff0c;即预测与决策。 “四条腿”则代表支撑人工智能的四大类科学技术&#xff0c;包括搜索、推理、学习和博弈。 非参数化模型&#xff08;nonparametric model&#xff09;&#xff1a;与参数化模型相反&…

二、分布式事务

目录 二、分布式事务2.1 什么是分布式事务2.2 分布式事务产生的背景2.3 分布式事务产生的场景2.4 分布式事务理论4.1 CAP理论4.2 Base理论 5、分布式事务的解决方案 二、分布式事务 2.1 什么是分布式事务 一组操作会产⽣多个数据库session会话 此时就会出现分布式事务 2.2 分…

我的第一个 VTK 程序

我的第一个 VTK 程序 我的第一个 VTK 程序VTK 可视化流程源程序运行结果 我的第一个 VTK 程序 环境&#xff1a; Visual Studio 2022 CommumityQt 6.2.3 MSVC2019 64位VTK 9.3.0 不会Cmake编译VTK库&#xff1f;看这个&#xff1a;使用 Cmake 对 VTK-9.3.0 进行编译 不会在…

Apache Hive的基本使用语法(一)

一、数据库操作 创建数据库 create database if not exists myhive;查看数据库 use myhive; desc database myhive;创建数据库并指定hdfs存储 create database myhive2 location /myhive2;删除空数据库&#xff08;如果有表会报错&#xff09; drop database myhive;…

基于jsp+mysql+Spring的SpringBoot招聘网站项目

基于jspmysqlSpring的SpringBoot招聘网站项目&#xff08;完整源码sql&#xff09;主要实现了管理员登录,简历管理,问答管理,职位管理,用户管理,职位申请进度更新,查看简历 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀…

同一个主机配置多个SSH key

使用git时&#xff0c;我们可能一个git客户端使用多个git服务器&#xff0c;比如github&#xff0c;自建gitlab&#xff0c;gitee&#xff0c;为了防止提交混乱&#xff0c;所以需要一一对应生成公私钥。 第一步&#xff1a; 使用ssh-keygen生成多对密钥对&#xff0c;比如&…