当前位置: 首页 > news >正文

50.Acwing基础课第854题-简单-Floyd求最短路

50.Acwing基础课第854题-简单-Floyd求最短路

题目描述

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

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

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

输入格式

\(第一行包含三个整数 n,m,k\)

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

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

输出格式

\(输出一个整数,表示从 1号点到 n 号点的最多经过 k条边的最短距离\)

\(如果不存在满足条件的路径,则输出 impossible\)

数据范围

\(1≤n≤200\)

\(1≤k≤n^2\)

\(1≤m≤20000\)
\(图中涉及边长绝对值均不超过 10000\)

输入样例:

3 3 2
1 2 1
2 3 2
1 3 1
2 1
1 3

输出样例:

impossible
1

代码:

// 包含字符串操作相关函数(本代码主要用memset,但Floyd模板常保留)
#include <cstring>
// 输入输出流头文件,用于cin/cout
#include <iostream>
// 包含min/max等算法函数,Floyd核心用到min
#include <algorithm>// 命名空间声明,避免每次写std::cin/std::cout
using namespace std;// 常量定义:N表示最大节点数(210适配多数Floyd题目范围),INF表示无穷大(0x3f3f3f3f约1e9,避免溢出)
const int N = 210, INF = 0x3f3f3f3f;// 全局变量:n-节点数,m-边数,Q-查询次数;d[N][N]是邻接矩阵,d[i][j]表示i到j的最短距离
int n, m, Q;
int d[N][N];// Floyd-Warshall算法核心函数:求解任意两点间的最短路径
void floyd()
{// k是「中转点」:枚举所有可能的中转节点for (int k = 1; k <= n; k ++ )// i是「起点」:枚举所有起点for (int i = 1; i <= n; i ++ )// j是「终点」:枚举所有终点for (int j = 1; j <= n; j ++ )// 核心松弛操作:比较「i直接到j」和「i经过k到j」的距离,取更小值d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}int main()
{// 输入:节点数n、边数m、查询次数Qcin >> n >> m >> Q;// 初始化邻接矩阵:// 1. 自己到自己的距离为0(i==j)// 2. 其他节点初始化为无穷大(表示初始时无直接路径)for (int i = 1; i <= n; i ++ )for (int j = 1; j <= n; j ++ )if (i == j) d[i][j] = 0;else d[i][j] = INF;// 读入m条边的信息while (m -- ){int a, b, c; // a-起点,b-终点,c-边权cin >> a >> b >> c;// 处理「重边」:如果a到b有多个边,只保留权值最小的那条d[a][b] = min(d[a][b], c);}// 调用Floyd算法,更新所有节点对的最短路径floyd();// 处理Q次查询while (Q -- ){int a, b; // 查询a到b的最短路径cin >> a >> b;int t = d[a][b];// 判断是否可达:INF/2是安全判据(避免负权边导致dist略小于INF)if (t > INF / 2) puts("impossible"); // 不可达输出impossibleelse cout << t << endl; // 可达输出最短距离}return 0;
}
http://www.jsqmd.com/news/609571/

相关文章:

  • 别只重启VSCode了!C++智能提示失效的深层排查:从插件配置到编译路径
  • 从‘轮胎压力传感器’到‘魔数饼干’:手把手拆解SOME/IP协议栈的五个核心通信模型
  • 对比学习损失函数实战:从InfoNCE到HCL的代码逐行解析
  • 如何用罗技鼠标宏在PUBG中实现精准压枪:新手指南
  • 一文读懂蛋白表达全过程:从基因到目标蛋白的完整技术解析
  • 别再只会用Entity了!Cesium点线面可视化,试试这几种更高效的实现方案
  • 用黑客技术挖漏洞:我是如何不上班年入20万的?(附完整方法)
  • # 010、迈向自主智能体:构建属于你的AI伙伴与生态系统
  • 旧衣堆积如山?爱裹回收免费上门,半小时搞定!
  • CaHA注射剂市场预测:从2020年的18%提升至2025年的34%
  • 最全淘宝API接口大全||【附接口测试与说明】
  • 如何通过PvZ Toolkit解决植物大战僵尸资源不足问题:高效全功能修改工具指南
  • 最小二乘问题详解18:增量式SFM核心流程实现
  • 02 - Python入门 - 基础语法
  • Aras Innovator二次开发入门:从AML语法到IOM调用的实战指南
  • 从零到精通:我的泛微Ecology9二次开发实战笔记(含JS开发避坑指南)
  • Unity Input System实战:从零构建单指旋转与双指缩放的手势交互系统
  • 频谱仪矢量网络分析仪射频模拟信号发生器 | 5G终端MIMO波束赋形测试
  • 8 年面试实战派导师陈晨:用精准教学,帮你叩开公职上岸之门
  • 机器人运动学控制,simulink仿真模型,基于滑膜边结构控制,学习滑膜控制的不二法门
  • 从零到一搞定12nm芯片后端:我用Innovus+UPF做车规级安全岛设计的避坑实录
  • 抽卡【牛客tracker 每日一题】
  • 从源码到实践:iproute2编译安装全攻略
  • P3705 [SDOI2017] 新生舞会 - Link
  • 剪流AI智能手机对自媒体创作者的具体帮助:实现降本增效的全面解析
  • YOLOv11 改进 - 主干网络 SwinTransformer 移位窗口层次化视觉变换器:层次化特征提取增强多尺度目标感知,优化复杂场景检测
  • 2025届必备的六大降AI率神器推荐
  • Qt源码中的EQ曲线升级版:精细编码与详尽注释
  • Ostrakon-VL-8B模型API接口详解:参数配置与性能调优
  • CKKS 同态加密数学基础推导质