最短路径——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;可以实现车载以太网多通道…

微信开发者工具webview的页面上使用console.log,日志在哪儿看?

webview的页面上使用console.log,日志在哪儿看&#xff1f; | 微信开放社区

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 …

程序员de工作是怎么样的?

程序员是干什么的程序员是从事计算机程序设计、开发、测试、维护的基层工作人员。他们用特定的编程语言&#xff0c;根据客户或项目的需求&#xff0c;编写和维护计算机程序。这些工作涵盖了从需求分析、设计、编码、测试&#xff0c;到维护的全过程。 程序员按照不同的技术领…

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…

C++之STL整理(1)之STL、vector、map、set数据结构初识

C之STL整理&#xff08;1&#xff09;之STL、vector、map、set数据结构初识 注&#xff1a;整理一些突然学到的C知识&#xff0c;随时mark一下 例如&#xff1a;忘记的关键字用法&#xff0c;新关键字&#xff0c;新数据结构 C 的 STL C之STL整理&#xff08;1&#xff09;之ST…

Flutter开发的Web应用 构建及部署 标准流程指南

前言 Flutter是Google推出的跨平台开发框架&#xff0c;支持多种平台&#xff1a;Windwos&#xff0c;Mac&#xff0c;iphone&#xff0c;Android&#xff0c;Web&#xff0c;Linux&#xff0c;甚至经过一些折腾还可以支持树莓派&#xff0c;十分强大&#xff0c;笔者曾写过一…

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;实例成员…

git命令-项目使用

项目中用到的git命令&#xff0c;记录下来&#xff0c;后续项目可以直接用 配置命令 一次性设置&#xff1a; git config --global user.name "Your Name" git config --global user.email "youremailaddress.com"git config --global alias.pl "pu…

【React】React AJAX

在React中使用AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种常见的做法&#xff0c;用于从服务器获取数据并在组件中显示。尽管AJAX的名字中包含了XML&#xff0c;但现在更多地使用JSON&#xff08;JavaScript Object Notation&#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;报错信息是 典型的网络连接异常 排查思路…