多元最短路(Floyd)

news2024/12/25 16:14:28
是一个基于动态规划的全源最短路算法。它可以高效地求出图上任意两点之间的最短路

时间复杂度 O(n^3)

状态转移方程

f[i][j]=min(f[i][j],f[i][k]+f[k][j])

核心代码 

void floyd(){
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				s[i][j]=min(s[i][j],s[i][k]+s[k][j]);
}
k就是一个中间值,每次把从i到j的距离与从i到k再从k到j的距离进行比较,选取最小值,做答案

 例如k等于1的时候可以更新4,2这个点k等于2的时候可以更新3,1这个点。。。。。。

例题B3647 【模板】Floyd 算法

给出一张由 n 个点 m 条边组成的无向图。

求出所有点对 (i,j) 之间的最短路径。

输入格式

第一行为两个整数 n,m,分别代表点的个数和边的条数。

接下来 m 行,每行三个整数 u,v,w,代表 u,v 之间存在一条边权为 w 的边。

输出格式

输出 n 行每行 n 个整数。

第 i 行的第 j 个整数代表从 i 到 j 的最短路径。

输入输出样例

输入 

4 4
1 2 1
2 3 1
3 4 1
4 1 1

输出 

0 1 2 1
1 0 1 2
2 1 0 1
1 2 1 0

说明/提示

对于 100% 的数据n≤100,m≤4500,任意一条边的权值 w 是正整数且 1⩽w⩽1000。

#include<iostream>
using namespace std;
const int N=1e4,INF=1e9;
int s[N][N];     //用于存图
int n,m,q;

void floyd(){
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				s[i][j]=min(s[i][j],s[i][k]+s[k][j]);
}

int main(){
	cin>>n>>m;
	//初始化
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)  
			if(i==j)s[i][j]==0;
			else s[i][j]=INF;     //s[i][j]代表从i到j的最短距离
			
	//把给的边存入
	while(m--){
		int a,b,c;
		cin>>a>>b>>c;
		s[a][b]=min(s[a][b],c);
		s[b][a]=min(s[b][a],c);    //可能给重复的值,取最小的那一个存入 
	} 
	
	floyd();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)
			cout<<s[i][j]<<" ";
			cout<<endl;
    }
	return 0;
} 

 

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

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

相关文章

使用巴特沃兹滤波器的1D零相位频率滤波研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

使用vscode在vue项目中重命名文件选择了更新导入路径仍有部分导入路径没有更新

背景: 将一个js文件重命名&#xff0c;vscode弹出是否更新导入路径&#xff0c;选择更新导入后&#xff0c;发现js文件中导入路径都自动更新&#xff0c;vue文件中路径都没有更新。 解决方案&#xff1a; 在设置中搜索updateimport&#xff0c;将最下面的Vue>Update Imports…

2023/08/13_____JMM JAVA Memory Model JAVA内存模型

JMM JAVA Memory Model java内存模型 作用&#xff1a;缓存一致性协议&#xff0c;用于定义数据读写的规则&#xff08;遵守&#xff0c;找到这个规则&#xff09; JMM定义了线程2工作内存和主内存之间的抽象关系&#xff1a;线程之间的共享变量存储在主内存&#xff08;main …

(贪心) 剑指 Offer 63. 股票的最大利润 ——【Leetcode每日一题】

❓剑指 Offer 63. 股票的最大利润 难度&#xff1a;中等 假设把某股票的价格按照时间先后顺序存储在数组中&#xff0c;请问买卖该股票一次可能获得的最大利润是多少&#xff1f; 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天&#xff08;股票价格 1&#xff09;的…

在 Windows 中恢复数据的 5 种方法

发生数据丢失的原因有多种。无论是因为文件被意外删除、文件系统或操作系统损坏&#xff0c;还是由于软件或硬件级别的存储故障&#xff0c;数据都会在您最意想不到的时候丢失。今天我们重点介绍五种数据恢复方法&#xff0c;以应对意外情况的发生。 1.从另一台机器启动硬盘 如…

24近3年内蒙古大学自动化考研院校分析

今天给大家带来的是内蒙古大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、内蒙古大学 学校简介 内蒙古大学位于内蒙古自治区首府、历史文化名城呼和浩特市&#xff0c;距北京400余公里&#xff0c;是中华人民共和国成立后党和国家在民族地区创办的第一所综合大…

阿里云轻量应用服务器使用教程(从购买配置、连接到网站上线)

阿里云轻量应用服务器怎么使用&#xff1f;阿里云百科分享轻量应用服务器从购买、配置建站环境、轻量服务器应用服务器远程连接、开端口到网站上线全流程&#xff1a; 目录 阿里云轻量应用服务器使用教程 步骤一&#xff1a;购买一台轻量应用服务器 步骤二&#xff1a;重置…

深入理解 Vue 3 计算属性:优雅地处理响应式数据计算

计算属性的定义 在 Vue3 的 HTML 模板中是支持 JavaScript 表达式的&#xff0c;例如&#xff1a; <h2>买5个共计&#xff1a;{{ price * 5 }} 元</h2>但是如果当表达式过于复杂时&#xff0c;模板代码就会变得非常臃肿并且可读性就会变差&#xff0c;恰巧&#…

【设计模式——学习笔记】23种设计模式——解释器模式Interpreter(原理讲解+应用场景介绍+案例介绍+Java代码实现)

案例引入 通过解释器模式来实现四则运算&#xff0c;如计算ab-c的值&#xff0c;具体要求 先输入表达式的形式&#xff0c;比如abc-de&#xff0c;要求表达式的字母不能重复在分别输入a,b,c,d,e的值最后求出结果 传统方案 编写一个方法&#xff0c;接收表达式的形式&#xf…

vue中有趣的几个功能

vue中有趣的几个功能 老实说&#xff0c;我们大多数人都不太喜欢阅读文档&#xff0c;但是当使用像 Vue 这样不断发展的现代前端框架时&#xff0c;每个新版本都会发生很多变化&#xff0c;我们可能会错过一些后来推出的新的、闪亮的功能。让我们来看看那些有趣但不那么受欢迎…

【Windows 常用工具系列 5 -- Selenium IDE的使用方法 】

文章目录 Selenium 介绍Selenium IDE 介绍 Selenium IDE安装Chrome 浏览器安装Selenium IDE使用 Selenium 介绍 Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 Selenium家庭成员有三个&#xff0c;分别是S…

并发冲突导致流量放大的线上问题解决

事故现象 生产环境&#xff0c;转账相关请求失败量暴增。 直接原因 现网多个重试请求同时到达 svr&#xff0c;导致内存数据库大量返回时间戳冲突。业务方收到时间戳冲突&#xff0c;自动进行业务重试&#xff0c;服务内部也存在重试&#xff0c;导致流量放大。 转账 首先…

【CI/CD】基于 Jenkins+Docker+Git 的简单 CI 流程实践(上)

基于 JenkinsDockerGit 的简单 CI 流程实践&#xff08;上&#xff09; 在如今的互联网时代&#xff0c;随着软件开发复杂度的不断提高&#xff0c;软件开发和发布管理也越来越重要。目前已经形成一套标准的流程&#xff0c;最重要的组成部分就是 持续集成 及 持续交付、部署。…

用对角线去遍历矩阵

原题链接 用对角线遍历矩阵https://leetcode.cn/leetbook/read/array-and-string/cuxq3/ 算法分析 图一 图二 图三 图四 由上述四个图可以总结得出以下八个结论&#xff1a; 结论1&#xff1a;k属于[0,a(max)b(max)]。 结论2&#xff1a;每一层遍历行最多存在min(m,n)个矩…

深度学习实战基础案例——卷积神经网络(CNN)基于SqueezeNet的眼疾识别|第1例

文章目录 前言一、数据准备1.1 数据集介绍1.2 数据集文件结构 二、项目实战2.1 数据标签划分2.2 数据预处理2.3 构建模型2.4 开始训练2.5 结果可视化 三、数据集个体预测 前言 SqueezeNet是一种轻量且高效的CNN模型&#xff0c;它参数比AlexNet少50倍&#xff0c;但模型性能&a…

4.深入对象

4.1创建对象三种方式 1.利用对象字面量创建对象 const obj{ name : 佩奇 }2.利用new 0bject创建对象 const obj new Object({ name: 佩奇 }) console.log(obj) // {name: 佩奇}3.利用构造函数创建对象 4.2构造函数 构造函数&#xff1a;是一种特殊的函数,主要用来初始化…

hive 中最常用日期处理函数

hive 常用日期处理函数 在工作中&#xff0c;日期函数是提取数据计算数据必须要用到的环节。哪怕是提取某个时间段下的明细数据也得用到日期函数。今天和大家分享一下常用的日期函数。为什么说常用呢&#xff1f;其实这些函数在数据运营同学手上是几乎每天都在使用的。 技术交…

Metasploit教程 - 基本命令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、metasploit版本二、命令1.help2.msfupdate 命令3.search命令 三.Armitage GUI四&#xff0c;扫描总结 我想我得对我的博客做一些美化&#xff0c;而不是只有…

【Power BI】使用 Power BI 处理结构化复杂表单数据 | 文末送书

文章目录 前言使用 Power BI 处理结构化复杂表单数据案例一、处理标题与内容同行的数据表案例二、处理标题与内容同单元格的数据表 文末总结Power BI 新书推荐 前言 数据处理是数据分析的奠基石&#xff0c;只有使用处理干净的数据&#xff0c;分析才会产生价值。简单而言&…