AcWing 854. Floyd求最短路

news/2024/10/22 7:56:00/

Problem: AcWing 854. Floyd求最短路

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

这是一个经典的图论问题,要求找出所有点对之间的最短路径。我们可以使用Floyd算法来解决这个问题。Floyd算法是一种动态规划的方法,它的基本思想是:对于图中的每一个点,尝试以它作为中间点,更新所有点对之间的最短路径。

解题方法

首先,我们需要初始化一个二维数组d,其中d[i][j]表示点i到点j的最短路径。初始化时,如果i和j是同一个点,那么d[i][j]为0;否则,d[i][j]为无穷大。
然后,我们读入所有的边,并更新对应的d[i][j]。
接下来,我们进行Floyd算法的主要部分。对于每一个点b,我们尝试以它作为中间点,更新所有点对之间的最短路径。具体来说,如果通过b,点i到点j的路径可以变得更短,那么我们就更新d[i][j]。
最后,我们读入所有的查询,输出对应的最短路径。

复杂度

时间复杂度:

Floyd算法的时间复杂度为 O ( n 3 ) O(n^3) O(n3),其中 n n n为点的数量。

空间复杂度:

我们需要一个二维数组来存储所有点对之间的最短路径,所以空间复杂度为 O ( n 2 ) O(n^2) O(n2)

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int MAXN = 210, INF = 0x3f3f3f3f;static int[][] d = new int[MAXN][MAXN];static int n, m, Q;public static void main(String[] args) throws IOException {n = nextInt();m = nextInt();Q = nextInt();// 初始化for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (i == j)d[i][j] = 0;elsed[i][j] = INF;}}for (int i = 0, x, y, z; i < m; i++) {x = nextInt();y = nextInt();z = nextInt();d[x][y] = Math.min(z, d[x][y]);}floyd();for (int i = 0, a, b; i < Q; i++) {a = nextInt();b = nextInt();out.println(d[a][b] > INF / 2 ? "impossible" : d[a][b]);}out.flush();}private static void floyd() {// TODO Auto-generated method stubfor (int b = 1; b <= n; b++) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {d[i][j] = Math.min(d[i][j], d[i][b] + d[b][j]);}}}}static int nextInt() throws IOException {sr.nextToken();return (int) sr.nval;}}

http://www.ppmy.cn/news/1455062.html

相关文章

windows驱动开发-WDF框架

WDF框架属于对WDM框架的封装&#xff0c;不过看起来&#xff0c;WDF是和WDM是完全不同的两个框架。对于驱动开发来说&#xff0c;WDM框架学习的意义在于理解内核是怎么运作的&#xff0c;毕竟WDM跨越了20年&#xff0c;仍然能够和好的适应windows现在的发展&#xff0c;说明这个…

笔试强训-day17_T2 十字爆破

一、题目链接 十字爆破 二、题目描述 牛牛在玩一个游戏&#xff1a; 一共有n行m列共nm个方格&#xff0c;每个方格中有一个整数。 牛牛选择一个方格&#xff0c;可以得到和这个方格同行、同列的所有数之和的得分。 例如&#xff1a;对于一个22的方格&#xff1a; 1 2 3 4 牛牛…

windows中tomcat本地部署javaweb项目war命令框闪退

今天在给友友做移植生产环境前的测试&#xff0c;在本地tomcat中部署javaweb项目打包好的war&#xff0c;发现运行tomcat文件bin下的exe可执行文件时候&#xff0c;命令框自动闪退。 我慌了&#xff0c;好吧&#xff0c;是我没见过世面&#xff0c;后面想了想jdk初始环境应该没…

Linux下top命令指标说明

目录 Linux下top命令指标说明1. 概览2. CPU利用率3. 内存利用率4. 进程信息 Linux下top命令指标说明 在Linux系统中&#xff0c;top 命令是一个用于实时监视系统运行状态的工具。通过 top 命令&#xff0c;我们可以了解系统的负载情况、CPU利用率、内存使用情况以及各个进程的…

频分复用系统设计及其MATLAB实现

引言 随着通信技术的飞速发展&#xff0c;通信系统的容量需求不断增长。频分复用&#xff08;Frequency Division Multiplexing, FDM&#xff09;作为一种重要的多路复用技术&#xff0c;被广泛应用于现代通信系统中。本文将介绍频分复用系统的设计原理&#xff0c;并展示如何…

在Vue项目中,`App.vue`、`main.ts`(或`main.js`)以及`index.html`的作用

在Vue项目中&#xff0c;App.vue、main.ts&#xff08;或main.js&#xff09;以及index.html各自承担着不同的作用&#xff0c;它们共同协作以启动和运行Vue应用。下面是每个文件的具体作用和它们之间的区别&#xff1a; ### App.vue App.vue 是Vue应用的根组件&#xff0c;它…

「云渲染平台」3D模型渲染是CPU还是GPU?

​在数字艺术创作和工程设计这两个领域中&#xff0c;将三维模型转换成逼真的二维图像的过程被称为模型渲染&#xff0c;这是一种对计算资源要求极高的技术活动。在渲染三维模型时&#xff0c;CPU和GPU各自承担着不同的任务。现在&#xff0c;让我们来了解在模型渲染的过程中&a…

​​【收录 Hello 算法】3.2 基本数据类型

目录 3.2 基本数据类型 3.2 基本数据类型 当谈及计算机中的数据时&#xff0c;我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织形式各异&#xff0c;但它们都由各种基本数据类型构成。 基本数据类型是 CPU 可以直接进行运算的类型&#xff0c…