【算法】Floyd算法多源汇最短路

news2024/11/26 18:41:37

 最短路问题基础问题到这里就结束了,附上最短路问题知识结构图。

c17c67aff11d43a6b0a3f1e018a8db75.png

题目

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

再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible

数据保证图中不存在负权回路。

输入格式

第一行包含三个整数 n,m,k。

接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。

接下来 k 行,每行包含两个整数 x,y,表示询问点 x 到点 y 的最短距离。

输出格式

共 k 行,每行输出一个整数,表示询问的结果,若询问两点间不存在路径,则输出 impossible

数据范围

1 ≤ n ≤ 200
1 ≤ k ≤ n^2
1 ≤ m ≤ 20000
图中涉及边长绝对值均不超过 10000

思路

    十分暴力,使用二维数组d储存点i到点j的最短距离。最外层循环是k,第二层是i,最内层是j,表示的是所有点i通过点k到达点j,取最小值存入d[i][j]中。

代码

#include<bits/stdc++.h>
#define int long long
#define  N 210
#define INF 1000000000
#define S "impossible"
using namespace std;

int n,m,Q;// n点数,m边数,Q询问次数
int d[N][N];// 储存点i到点j的最短距离

void floyd()
{
    for(int k = 1; k <= n; k ++)
        for(int i = 1; i <= n; i ++)
            for(int j = 1; j <= n; j ++)
                d[i][j] = min(d[i][j],d[i][k] + d[k][j]);// 使用三重循环,保留点i到点j的最小距离
}

int32_t main()
{
    cin >> n >> m >> Q;// 输入点数,边数询问次数
    for(int i = 1; i <= n; i ++)// 初始化一个点到另一个点的距离
        for(int j = 1; j <= n; j ++)
            if(i == j) d[i][j] = 0;// 一个点到它本身的距离为0
            else d[i][j] = INF;// 将点i到点j的距离初始化为INF
    while(m --)
    {
        int a,b,w;
        cin >> a >> b >> w;
        d[a][b] = min(d[a][b],w);// 存在重边的话,保留长度最小的边
    }
    floyd();
    while(Q --)
    {
        int a,b;
        cin >> a >> b;
        if(d[a][b] < INF / 2)// 如果点a可以到达点b则输出最短距离,否则输出impossible
            cout << d[a][b] << endl;
        else
            cout << S << endl;
    }
    return 0;
}

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

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

相关文章

Python 模块:创建、导入和使用

什么是模块&#xff1f; 将模块视为代码库。模块是一个包含一组函数的文件&#xff0c;您想要在应用程序中包含这些函数。 创建一个模块 要创建一个模块&#xff0c;只需将要包含在其中的代码保存在扩展名为 .py 的文件中&#xff1a; 示例&#xff1a;将以下代码保存在名为…

YOLOv5算法 | 万字长文带你深度解析yolov5s.yaml配置文件

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。配置文件yolov5s.yaml在YOLOv5模型训练过程中发挥着至关重要的作用&#xff0c;属于初学者必知必会的文件&#xff01;在YOLOv5-6.0版本源码中&#xff0c;配置了5种不同大小的网络模型&#xff0c;分别是YOLOv5n、YOLOv5s…

D-Nerf:用于动态场景表示的神经辐射场

Pumarola A, Corona E, Pons-Moll G, et al. D-nerf: Neural radiance fields for dynamic scenes[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 10318-10327. D-Nerf 较 NeRF 的改进 1 就是能够建模移动或变形的物体&#…

2021年上半年上午易错题(软件设计师考试)

1.在CPU中&#xff0c;用&#xff08;A&#xff09;给出将要执行的下一条指令在内存中的地址。 A.程序计数器 B.指令寄存器 C.主存地址寄存器 D.状态条件寄存器 3.采用DMA方式传送数据时&#xff0c;每传送一个数据都需要占用一个&#xff08;C&#xff09;。 A.指令周期…

最新Microsoft Edge浏览器如何使用圆角

引入 最近我看了edge官方的文档&#xff0c;里面宣传了edge的最新UI设计&#xff0c;也就是圆角&#xff0c;但是我发现我的浏览器在升级至最新版本之后&#xff0c;却没有圆角 网上有很多人说靠实验性功能即可解锁&#xff0c;但是指令我都试过了&#xff0c;每次都是搜索无结…

生鲜冻货经营小程序商城的效果如何

海鲜肉类也是人们的主要餐食之一&#xff0c;现产和冻货都有很高的市场需求度&#xff0c;由于受众广&#xff0c;因此对商家来说&#xff0c;除了本地生意外&#xff0c;外地生意才有更大的拓展空间。 但信息发展下&#xff0c;仅依靠电话、微信私信显然难以完善&#xff0c;…

SpringBoot集成与应用Neo4j

文章目录 前言集成使用定义实体配置定义Repository查询方法方式一&#xff1a;Query方式二&#xff1a;Cypher语法构建器方式三&#xff1a;Example条件构建器方式四&#xff1a;DSL语法 自定义方法自定义接口继承自定义接口实现自定义接口neo4jTemplateNeo4jClient 自定义抽象…

服务器资源检查

1.检查CPU情况 # 型号及核数 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c # 查看物理cpu个数 cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l # 查看逻辑cpu个数 cat /proc/cpuinfo | grep "processor" | wc -l cat /proc/…

python随手小练9(南农作业题)

题目1&#xff1a; 用python提供的相关函数计算数学表达式的值 具体操作&#xff1a; a float(input("x:")) #input()输入&#xff08;默认为字符串str形式&#xff09; #float()将()内类型转换为浮点型&#xff08;即有小数点&#xff09; b a (3*a)/4 #…

《你不知道的Javascript系列》——不可变性immutable

基础 JavaScript中存在以下数据类型&#xff1a; 原生&#xff08;基本&#xff09;类型 —— Boolean, Number, String非原始&#xff08;引用&#xff09;类型或对象 —— Object, Array, Function特殊 —— Null, Undefined 原生数据类型默认是不可变的&#xff0c;对于常…

好消息FL Studio21.2中文版本发布了!新功能详细介绍

为庆祝 FL Studio 21.2 的发布&#xff0c;所有 FL Studio 用户都可免费使用一个月的 FL Cloud。只需打开 FL Studio 21.2&#xff0c;点击浏览器中的 "声音 "标签即可开始使用。FL Cloud 提供完全集成的采样库、人工智能母带处理和由 DistroKid 支持的数字发行&…

bbr 流相互作用图示

类似 AIMD 收敛图&#xff0c;给出 bbr 的对应图示&#xff1a; bbr 多流相互作用非常复杂&#xff0c;和右下角的 AIMD 相比&#xff0c;毫无美感&#xff0c;但是看一眼左下角的 bbr 单流情况&#xff0c;又过于简陋&#xff0c;而 bbr 的核心就基于这简陋的假设。 浙江温…

【rust/esp32】在idf中使用embedded-graphics控制st7789 LCD屏幕

文章目录 说在前面模块详情准备工作开始编译烧录结果 说在前面 esp32版本&#xff1a;s3运行环境&#xff1a;esp-idf(std)开发环境&#xff1a;wsl2LCD模块&#xff1a;ST7789V2 240*280 LCDgithub地址&#xff1a;这里 模块详情 某宙的esp32s3开发板 某雪的1.69inch LCD模块…

78 子集

子集 题解1 回溯模板 题解2 迭代&#xff08;mask思想&#xff09; 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入…

AcWing 第127场周赛 构造矩阵

构造题目&#xff0c;考虑去除掉最后一行最后一列先进行考虑&#xff0c;假设除了最后一行和最后一列都已经排好了&#xff08;你可以随便排&#xff09;&#xff0c;那么分析知最后一个数字由限制以外其他都已经确定了&#xff0c;无解的情况是k为-1 并且n&#xff0c;m的奇偶…

网络编程套接字(1)——简单的UDP网络程序

文章目录 一.预备知识1.理解源IP地址和目的IP地址2.理解源MAC地址和目的MAC地址3.理解源端口号和目的端口号4.PORT VS PID5.认识TCP协议和UDP协议6.网络字节序 二.socket编程接口1.socket常见API2.sockaddr结构 三.简单的UDP网络程序1.服务端创建套接字2.服务端绑定3.字符串IP …

ctf md5爆破

1.知道组成的字符为数字,然后知道加密后的MD5,求组成的字符 import hashlibimport stringdef crackMd5(dst):dst dst.lower()for a in range(0,10):for b in range(0,10):for c in range(0,10):for d in range(0,10):word str(a) str(b) str(c) str(d) "_heetian&q…

【报错】kali安装ngrok报错解决办法(zsh: exec format error: ./ngrok)

问题描述 kali安装ngrok令牌授权失败 在安装配置文件的时候报错&#xff1a;zsh: exec format error: ./ngrok 原因分析&#xff1a; 在Kali Linux上执行./ngrok时出现zsh exec格式错误的问题可能是由于未安装正确版本的ngrok或操作系统不兼容ngrok导致的。以下是一些可能的解…

k8s安装时初始化报错:error execution phase preflight

服务器配置与k8s版本 系统版本&#xff1a; CentOS Linux release 7.9.2009 (Core)内核版本&#xff1a; [rootk8s-node02 tmp]# uname -r 5.4.259-1.el7.elrepo.x86_64k8s版本 v1.15.1 [rootk8s-node1 tmp]# kubeadm version kubeadm version: &version.Info{Major:&q…

(免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设农产品销售管理系统。…