【蓝桥杯】算法模板题(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.mzph.cn/news/690841.shtml

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

相关文章

第十四届“中关村青联杯”全国研究生数学建模竞赛-A题:无人机在抢险救灾中的优化运用

目录 摘 要: 1 问题重述 1.1 问题背景 1.2 待解决的问题 2 模型假设及符号说明

GitHub仓库文件部署

目录 软件下载和安装 git创建仓库 Github仓库配置 git管理软件配置 Git管理 软件下载和安装 首先需要下载git&#xff0c;以及git管理软件&#xff0c;对其进行安装。 git创建仓库 首先需要创建仓库&#xff0c;在本地仓库文件夹cmd之后输入以下指令创建git仓库文件。 …

解决laravel-admin安装报错1071 Specified key was too long问题

在执行php artisan admin:install命令安装laravel-admin的时候&#xff0c;如果你使用的数据库是MySQL v5.7.7以下版本就会报下面的错&#xff1a; SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL:…

课时39:表达式_运算符_简单计算

3.1.2 简单计算 学习目标 这一节&#xff0c;我们从 [ ] 、 l e t 、 ( ( ) ) 、 []、let、(())、 []、let、(())、(())、小结 五个方面来学习。 $[] 简介 $[]方法&#xff0c;常用于整数计算场景&#xff0c;适合不太复杂的计算&#xff0c;运算结果是小数的也会自动取整…

递归读取文件夹下的所有文件

水一篇文章 &#x1f436; 代码 package file;import org.apache.commons.lang3.StringUtils; import org.junit.Test;import java.io.File; import java.util.Objects;/*** FlattenDirFiles** author allens* date 2024/2/19*/ public class FlattenDirFiles {// 文件数量pri…

小米空气净化器2s使用体验

这个产品最早上市是2017年&#xff0c;我买回来实际上只用了1年就弃用了&#xff0c;性能不行&#xff0c;使用体验也不好。 打算买新的空气净化器&#xff0c;抽空吐槽一下。 这个净化器发售价是899&#xff0c;在当时来说算中下水平的&#xff0c;小米的&#xff0c;有米家…

什么是跨端,常用的跨端技术

跨平台是跨操作系统&#xff0c;跨端是指客户端 常见的客户端有&#xff0c;web、android、ios 等&#xff0c;客户端的特点是有界面、由逻辑&#xff0c;所以包含逻辑跨端和渲染跨端。 常用的跨端技术方案 React Native&#xff1a; 由 Facebook 推出的开源框架&#xff0c;…

Spring Boot与LiteFlow:轻量级流程引擎的集成与应用含完整过程

点击下载《Spring Boot与LiteFlow&#xff1a;轻量级流程引擎的集成与应用含完整过程》添加链接描述 1. 前言 本文旨在介绍Spring Boot与LiteFlow的集成方法&#xff0c;详细阐述LiteFlow的原理、使用流程、步骤以及代码注释。通过本文&#xff0c;读者将能够了解LiteFlow的特…

数据分析师SQL面试准备(part1)

1. SQL 万能框架 2. SQL的书写顺序&#xff0c;跟程序真的执行顺序不同 3. 4. 5. 6. 7. case when utilization 8. 9. 10. 11.

OpenHarmony—UIAbility组件间交互(设备内)

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时&#xff0c;会涉及到启动特定的UIAbility&#xff0c;该UIAbility可以是应用内的其他UIAbility&#xff0c;也可以是其他应用的UIAbility&#xff08;例如启动三方支付UIAbility&#xff09;。 本章节将从如下场…

多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型

多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型 目录 多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基…

01.Redis中间件实战1

Redis中间件实战1 Redis各种数据结构实战 字符串 需求:将用户信息存储至缓存中,实现每次前端请求获取用户个人详情时直接从缓存中获取。来演示字符串的写入与读取。 技术方案:为了实现这个需求,首先需要建立用户对象实体,里面包含用户个人的各种信息,包括ID、年龄、姓…

Windows 命令提示符(CMD)操作(三):用户管理

三、用户管理 3.1 net user 管理用户帐户&#xff0c;如创建、删除用户 一般语法&#xff1a; net user [username [password | *] [options]] [/domain] [/add] [/delete] [/expires:{date | never}] [/active:{yes | no}]常见选项和参数包括&#xff1a; [username]&…

化学空间可视化(chemical space visualization)开源软件ChemPlot的安装及使用

文章目录 前言一、ChemPlot是什么&#xff1f;二、conda环境安装ChemPlot1. 创建conda环境2. 安装chemplot及需要的包3. 检验安装 三、使用步骤1. 化合物数据库可视化使用方法BBBP数据库的t-SNE降维后可视化&#xff1a;BBBP数据库的PCA降维后可视化&#xff1a;BBBP数据库的UM…

qt QXlsx操作 excel 单元格

1.单元格设置宽度 m_pxlsx->setColumnWidth(5, 10);//5为列&#xff0c;10为列的宽度&#xff0c;excel表格中默认单元格宽度为9.36英寸 注意&#xff1a;单元格列宽的单位是英寸&#xff0c;默认的单元格列宽为9.36英寸。 注意&#xff1a;单元格列宽单位不是像素。 我之…

shapely 笔记:基本方法

1 线性方法 1.1 object.interpolate(distance[, normalizedFalse]) print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(1.5)) #POINT (0.5 1)print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(0.75, normalizedTrue)) #POINT (0.5 1) LineString([(0, 0), (0…

JimuReport积木报表 v1.7.0 变革版本发布,低代码报表设计工具

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

从零开始的 dbt 入门教程 (dbt core 开发进阶篇)

引 在上一篇文章中&#xff0c;我们花了专门的篇幅介绍了 dbt 更多实用的命令&#xff0c;那么我们继续按照之前的约定来聊 dbt 中你可能会遇到的疑惑以及有用的概念&#xff0c;如果你是 dbt 初学者&#xff0c;我相信如下知识点一定会对你有极大的帮助&#xff1a; 了解 dbt_…

Python数据分析:NumPy、Pandas与Matplotlib库

Python 是一种强大的编程语言&#xff0c;特别适合数据分析&#xff0c;主要得益于其丰富的库生态系统。NumPy、Pandas 和 Matplotlib 是 Python 中最常用的数据分析库。以下是对这三个库的简要介绍以及相应的代码示例。 1. NumPy NumPy 是 Python 的一个基本库&#xff0c;用…

前端 node 常见的包管理工具 npm、npx、Yarn、cnpm、pnpm 的区别有哪些

些工具都是用于管理 Node.js 包和依赖项的 npm (Node Package Manager): npm 是 Node.js 的默认包管理工具&#xff0c;随同 Node.js 安装。主要功能包括安装、发布、管理 JavaScript 包和依赖项。npm 是最常用的包管理工具之一&#xff0c;拥有庞大的包仓库&#xff08;npm Re…