【蓝桥杯】算法模板题(Floyd算法)

一.弗洛伊德算法

用途:用来求解多源点最短路径问题

思想:Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。

主要步骤:

1)初始化:使用邻接矩阵初始化dist数组

2)依次考察每个顶点:在当前dist数组中依次加入各个顶点,考察是否对最短路径产生影响。如果路径变短,则更新dist数组和path数组。

时间复杂度:

O(n^3)

二.实战演练

1.题目描述:

小明喜欢观景,于是今天他来到了蓝桥公园。

已知公园有N个景点,景点和景点之间一共有M条道路。小明有Q个观景计划,每个计划包含一个起点st和一个终点ed,表示他想从st去到ed。但是小明的体力有限,对于每个计划他想走最少的路完成,你可以帮帮他吗?

输入描述:

输入第一行包含三个正整数:N,M,Q

第2到第M+1行每行包含三个正整数u,v,w,表示u\leftrightarrow v之间存在一条距离为w的路。

第M+2到第M+Q-1行每行包含两个正整数st,ed。

1\leq N\leq 400,1\leq M\leq \frac{N(N-1)}{2},Q\leq 10^3, 1\leq u,v,st,ed\leq n,1\leq w\leq 10^9

 

输出描述:

输出共Q行,对应输入数据中的查询。

若无法从st到ed,则输出-1.

2.思路:

memset是一个初始化函数,作用是将某一块内存全部设置为指定的值。

void *memset(void *s, int c, size_t n); 
  • s指向要填充的内存块。
  • c是要被设置的值。
  • n是要被设置该值的字符数。
  • 返回类型是一个指向存储区s的指针。

3.代码实现:

#include <iostream>
#include <cstring>
using namespace std;//有n个顶点,m条边的无向图
long long dist[405][405],n,m,q,u,v,w;int main(int argc, const char * argv[]) {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m>>q;memset(dist, -1, sizeof(dist));for(int i=1;i<=n;i++){dist[i][i]=0;}for(int i=0;i<m;i++){cin>>u>>v>>w;if(dist[u][v]!=-1)dist[u][v]=dist[v][u]=min(w,dist[u][v]);//防止出现重复边elsedist[u][v]=dist[v][u]=w;}//floydfor(int i=1;i<=n;i++)for(int j=1;j<=n;j++)for(int k=1;k<=n;k++)if(dist[j][i]!=-1&&dist[i][k]!=-1){if(dist[j][k]==-1||dist[j][k]>dist[j][i]+dist[i][k]){dist[j][k]=dist[j][i]+dist[i][k];}}int st,ed;for(int i=0;i<q;i++){cin>>st>>ed;cout<<dist[st][ed]<<'\n';}return 0;
}

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

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

相关文章

MySQL为什么改进LRU算法?

普通LRU算法 LRU = Least Recently Used(最近最少使用): 就是末尾淘汰法,新数据从链表头部加入,释放空间时从末尾淘汰. 当要访问某个页时,如果不在Buffer Pool,需要把该页加载到缓冲池,并且把该缓冲页对应的控制块作为节点添加到LRU链表的头部。当要访问某个页时,如果在…

单主模式和多主模式切换

1 组复制模式切换注意点 组复制有两种运行模式&#xff0c;一种是单主模式&#xff0c;一种是多主模式。这个模式是在整个组中设置的&#xff0c;由 group_replication_single_primary_mode 这个系统变量指定&#xff0c;而且在所有成员上必须保持一致。ON 表示单主模式&#…

Javaweb之SpringBootWeb案例之AOP通知顺序的详细解析

3.2 通知顺序 讲解完了Spring中AOP所支持的5种通知类型之后&#xff0c;接下来我们再来研究通知的执行顺序。 当在项目开发当中&#xff0c;我们定义了多个切面类&#xff0c;而多个切面类中多个切入点都匹配到了同一个目标方法。此时当目标方法在运行的时候&#xff0c;这多…

包教包会的Kotlin Flow教程

原文链接 包教包会的Kotlin Flow教程 公众号「稀有猿诉」 Kotlin中的Flow是专门用于处理异步数据流的API&#xff0c;是函数响应式编程范式(Functional Reactive Programming FRP)在Kotlin上的一个实现&#xff0c;并且深度融合了Kotlin的协程。是Kotlin中处理异步数据…

文件上传漏洞--Upload-labs--Pass02--Content-Type绕过

一、什么是 Content-Type 我们在上传文件时利用 Burpsuite 进行抓包&#xff0c;如下图所示&#xff1a; 上传文件后台的源代码可能会对 Content-Type 进行规定&#xff0c;设置白名单 或 黑名单&#xff0c;这时就要利用Content-Type绕过上传含有恶意代码的 php文件。 二、代…

1.3_1 操作系统的运行机制

文章目录 1.3_1 操作系统的运行机制&#xff08;一&#xff09;预备知识&#xff1a;程序是如何运行的&#xff08;二&#xff09;内核程序 vs 应用程序&#xff08;三&#xff09;特权指令 vs 非特权指令&#xff08;四&#xff09;内核态 vs 用户态内核态、用户态的切换 总结…

PCB差模辐射是如何产生的

在电路应用中,高频时钟信号往往会采用差分线传输模式,其优点是在提高速率的同时减小功耗和提高抗扰度,因此,差模辐射就成为电路正常工作的结果,是电流流过导体形成的环路所产生,差模辐射模型可以被模拟为一个小环形天线,对于一个面积为A的小环路,载有电流Idm,在远场中…

程序员可以做一辈子吗?大龄程序员出路在哪?

前言 随着2023年AI的出现&#xff0c;大家对待程序员工作有了一丝丝危机感&#xff0c;特别是今年整个IT行业进入了前所未有的寒冬期&#xff0c;让程序员不得不思考未来的职业发展。 甚至很多程序员一想到自己接近35岁&#xff0c;焦虑感油然而生&#xff0c;这也是大部分程…

WebService接口测试

WebService的理解 WebService就是Web服务的意思&#xff0c;对应的应用层协议为SOAP&#xff08;相当于HTTP协议&#xff09;&#xff0c;可理解为远程调用技术。 特点&#xff1a; 客户端发送的请求主体内容&#xff08;请求报文&#xff09;的格式为XML格式 接口返回的响…

代码随想录第33天|● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果

文章目录 1005.K次取反后最大化的数组和贪心思路&#xff1a;代码&#xff1a; 34. 加油站思路一&#xff1a;全局贪心代码&#xff1a; 思路二&#xff1a;代码&#xff1a; 135. 分发糖果思路&#xff1a;两边考虑代码&#xff1a; 1005.K次取反后最大化的数组和 贪心思路&am…

【图像分割 2024 ICLR】Conv-LoRA

【图像分割 2024 ICLR】Conv-LoRA 论文题目&#xff1a;CONVOLUTION MEETS LORA: PARAMETER EFFICIENT FINETUNING FOR SEGMENT ANYTHING MODEL 中文题目&#xff1a;卷积满足lora:分段任意模型的参数有效微调 论文链接&#xff1a;https://arxiv.org/abs/2401.17868 论文代码&…

FPFH特征描述符、对应关系可视化以及ICP配准

一、FPFH特征描述符可视化 C #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pcl/search/kdtree.h> #include <pcl/io/pcd_io.h> #include <pcl/features/normal_3d_omp.h>//使用OMP需要添加的头文件 #include <boo…