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

49、Floyd求最短路

Floyd求最短路

题目描述

给定一个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≤n≤200, 1n200,
1 ≤ k ≤ n 2 1≤k≤n^2 1kn2
1 ≤ m ≤ 20000 , 1≤m≤20000, 1m20000,
图中涉及边长绝对值均不超过10000。

输入样例:3 3 2
1 2 1
2 3 2
1 3 1
2 1
1 3输出样例:impossible
1

Solution

import java.util.*;
import java.io.*;
import java.math.*;class Main{static final int N = 210;static final int INF = 0x3f3f3f3f;static int[][] g = new int[N][N];// floyd 算法public static void floyd(int n){for(int k = 1; k <= n; k++)for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)g[i][j] = Math.min(g[i][j], g[i][k] + g[k][j]);}public static void main(String[] args) throws IOException{BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));String[] s = br.readLine().split(" ");int n = Integer.parseInt(s[0]);int m = Integer.parseInt(s[1]);int k = Integer.parseInt(s[2]);// 邻接矩阵初始化for (int i = 1; i <= n; i ++ )for (int j = 1; j <= n; j ++ )if (i == j) g[i][j] = 0;else g[i][j] = INF;while(m-- > 0){s = br.readLine().split(" ");int x = Integer.parseInt(s[0]);int y = Integer.parseInt(s[1]);int z = Integer.parseInt(s[2]);g[x][y] = Math.min(g[x][y], z);}floyd(n);while(k-- > 0){s = br.readLine().split(" ");int x = Integer.parseInt(s[0]);int y = Integer.parseInt(s[1]);if(g[x][y] > INF / 2) bw.write("impossible\n");else bw.write(g[x][y] + "\n");}bw.close();br.close();}
}

相关文章:

  • 4K高刷显示器 - 蚂蚁电竞ANT27VU
  • Swift 并发
  • 机器学习模型以及优缺点——logistic
  • java基础-chapter18(网络编程)
  • TreeMap和TreeSet的排序机制
  • 第十四章 创建Web客户端 - XML 命名空间的 SOAP 向导选项
  • 【第2章】SpringBoot实战篇之接口参数校验和全局异常处理
  • linux上VirtualBox使用
  • 原码一位乘法(计算机组成原理)
  • “华为杯”第十三届中国研究生 数学建模竞赛-D题:军事行动避空侦察的时机和路径选择(续)(附MATLAB代码实现)
  • macbook配置前端环境:深度解析与实战指南
  • Arrays(操作数组工具类)、Lambda表达式
  • yolov10/v8 loss详解
  • SpringBoot前端URL访问本地磁盘文件
  • Tomcat 面试题(一)
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • Android组件 - 收藏集 - 掘金
  • ComponentOne 2017 V2版本正式发布
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • fetch 从初识到应用
  • gitlab-ci配置详解(一)
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java基本数据类型之Number
  • JDK 6和JDK 7中的substring()方法
  • js
  • passportjs 源码分析
  • socket.io+express实现聊天室的思考(三)
  • Spark学习笔记之相关记录
  • Swoft 源码剖析 - 代码自动更新机制
  • vue数据传递--我有特殊的实现技巧
  • webpack+react项目初体验——记录我的webpack环境配置
  • 测试开发系类之接口自动化测试
  • 构建二叉树进行数值数组的去重及优化
  • 关于使用markdown的方法(引自CSDN教程)
  • 后端_ThinkPHP5
  • 将 Measurements 和 Units 应用到物理学
  • 前端面试题总结
  • 前端自动化解决方案
  • 区块链分支循环
  • 如何解决微信端直接跳WAP端
  • 使用Gradle第一次构建Java程序
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • ​MySQL主从复制一致性检测
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #QT(智能家居界面-界面切换)
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (pycharm)安装python库函数Matplotlib步骤
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (一)Thymeleaf用法——Thymeleaf简介
  • (杂交版)植物大战僵尸
  • (转)为C# Windows服务添加安装程序
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考