(算法基础)Floyd算法
适用情景
Floyd算法适用于多源汇最短路,也就是他问你比如说从3号点到6号点的最短路距离,比如说从7号点到20号点的最短路距离,而不是单源最短路(从1号点到n号点的最短路距离)。在这个算法当中允许负权边的存在。但在求最短路距离当中(包括其他算法也一样)是不能够出现负环的,因为这样最短路距离可能变到负无穷去了
时间复杂度
三重无脑循环,显然O(N^3)。
算法解释
首先,对于Floyd算法来说,对于图的存储必须要用邻接矩阵来存,不能用邻接表。然后对于邻接矩阵,一开始当然得初始化,这边必须得注意:由于是图,这个矩阵无论是行还是列,有效位都是从一开始。
int dist[N][N]; //N表示图中点的个数+1
然后Floyd算法是允许这个图当中存在负权边,但是不能出现负环(因为在最短路问题当中的话,一旦出现负环,最短路可能变成负无穷)。然后需要对dist数组初始化,这边再提一句:我们现在已经是默认图当中没有负环,好那么现在如果说存在自环的话,肯定是正的,在最短路当中那就不予考虑,于是在初始化的过程当中,如果说i等于j,直接就是0,其他的话就初始化成正无穷,为什么要正无穷?想想就知道了,等会儿我肯定需要min操作嘛
for (int i=1;i<=n;i++)
{for (int j=1;j<=n;j++){if (i==j){dist[i][j]=0;}else{dist[i][j]=0x3f3f3f3f;}}
}
然后当往这个邻接矩阵当中去输入一条一条图当中的边的时候,由于我们现在是最短路问题,因此我们只需要取小的就可以了,然后如果是自环的话,所以我们默认是没有负环的,因此取小后就是0
while(m--)
{scanf("%d %d %d",&a,&b,&c);dist[a][b]=MIN(dist[a][b],c);
}
然后接下来就是执行Floyd算法,其实就是三重循环,外循环k从1到n,第二层循环i从1到n,第三层循环j从1到n。然后每一层循环的话就如下比较一下,至于原理的话,这个是与动态规划有关,像我现在的话也掌握不了,先把算法的步骤先记牢吧
for (int k=1;k<=n;k++)
{for (int i=1;i<=n;i++){for (int j=1;j<=n;j++){dist[i][j]=MIN(dist[i][j],dist[i][k]+dist[k][j]);}}
}
然后当这三重循环结束之后,原先dist数组是用来存边的,现在他已经像孙悟空变身一样,变成了从i到j的最短距离了。当然也有可能的情况就是从i到j的话是走不到的,这时候还谈个屁最短路啊,那如何去判断走不到的这种情况呢?由于是允许存在负权边的情况,因此当在更新的时候有可能会把这个无穷大的值稍微更新了小了一些,因此不能直接dist[ i ][ j ] 等于 0x3f3f3f3f
while(k--)
{scanf("%d %d",&a,&b);if(dist[a][b]>0x3f3f3f3f/2){printf("impossible\n");}else{printf("%d\n",dist[a][b]);}
}
例题
来源:AcWing
854. Floyd求最短路 - AcWing题库
#include <stdio.h>
#define N 210
#define MIN(a,b) ((a)<(b)?(a):(b))
int dist[N][N];
int main()
{int n,m,k,a,b,c;scanf("%d %d %d",&n,&m,&k);for (int i=1;i<=n;i++){for (int j=1;j<=n;j++){if (i==j){dist[i][j]=0;}else{dist[i][j]=0x3f3f3f3f;}}}while(m--){scanf("%d %d %d",&a,&b,&c);dist[a][b]=MIN(dist[a][b],c);}for (int k=1;k<=n;k++){for (int i=1;i<=n;i++){for (int j=1;j<=n;j++){dist[i][j]=MIN(dist[i][j],dist[i][k]+dist[k][j]);}}}while(k--){scanf("%d %d",&a,&b);if(dist[a][b]>0x3f3f3f3f/2){printf("impossible\n");}else{printf("%d\n",dist[a][b]);}}return 0;
}
相关文章:
(算法基础)Floyd算法
适用情景Floyd算法适用于多源汇最短路,也就是他问你比如说从3号点到6号点的最短路距离,比如说从7号点到20号点的最短路距离,而不是单源最短路(从1号点到n号点的最短路距离)。在这个算法当中允许负权边的存在。但在求最…...
SQL语法:浅析select之七大子句
Mysql版本:8.0.26 可视化客户端:sql yog 目录一、七大子句顺序二、演示2.1 from语句2.2 on子句2.3 where子句2.4 group by子句2.4.1 WITHROLLUP,加在group by后面2.4.2 是否可以按照多个字段分组统计?2.4.3 分组统计时,…...
中国人民大学与加拿大女王大学金融硕士——去有光的地方,并成为自己的光
光是我们日常生活中一个重要的元素,试想一下如果没有光,世界将陷入一片昏暗。人生路亦是如此,我们从追逐光、靠近光、直到自己成为光。人民大学与加拿大女王大学金融硕士项目是你人生路上的一束光吗 渴望想要成为一个更好的人,就…...
Python数据结构与算法篇(五)-- 二分查找与二分答案
1 二分法介绍 1.1 定义 二分查找又称折半查找、二分搜索、折半搜索等,是一种在静态查找表中查找特定元素的算法。 所谓静态查找表,即只能对表内的元素做查找和读取操作,不允许插入或删除元素。 使用二分查找算法,必须保证查找表中…...
小游戏也要讲信用
当下,小游戏鱼龙混杂,官方为能更好地保护用户、开发者以及平台的权益,近日宣布7月1日起试行小游戏主体信用分机制。 主体信用分是什么呢?简单来说,这是针对小游戏主体下所有小游戏帐号行为,对开发者进行评…...
贪心算法11
1. 贪心算法的概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心…...
【并发编程】JUC并发编程(彻底搞懂JUC)
文章目录一、背景二、什么是JUC?三、JUC框架结构四、JUC框架概述五、JUC中常用类汇总六、相关名词进程和线程进程线程创建线程的几种常见的方式并发和并行用户线程和守护线程七、synchronized 作用范围:八、Lock锁(重点)什么是 Lock锁类型Lock接口lock()…...
Compose 动画 (七) : 高可定制性的动画 Animatable
1. Animatable和animateDpAsState的区别是什么 Animatable是Android Compose动画的底层API,如果我们查看源码,可以发现animateDpAsState内部是调用的animateValueAsState,而animateValueAsState内部调用的是Animatable animateDpAsState比A…...
vue3组件传值
1.父向子传值 父组件 引入子组件 import Son from ./components/Son.vue 设置响应式数据 const num ref(99) 绑定到子组件 <Son :num"num"></Son> 子组件 引入defineProps import { defineProps } from vue; 生成实例接收数据 type设置接收类…...
小白开发微信小程序00--文章目录
一个小白,一个老牛,空手能不能套白羊,能不能白嫖?我告诉你,一切都so easy,这个系列从0到106,屌到上天,盖过任何一个,试问,网上讲微信小程序开发的,…...
随手记录第九话 -- Java框架整合篇
框架莫过于Spring了,那就以它为起点吧。 本文只为整理复习用,详细内容自行翻看以前文章。 1.Spring 有人说是Spring成就Java,其实也不是并无道理。 1.1 Spring之IOC控制反转 以XML注入bean的方式为入口,定位、加载、注册&…...
电影《铃芽之旅》观后感
这周看了电影《铃芽之旅》,整部电影是新海诚的新作。电影讲述的是女主铃芽为了关闭往门,在日本旅行中,遭遇灾难的故事。 (1)往昔记忆-往昔之物 电影中,有很多的“往门”,换成中国的话说…...
Web自动化测试(二)(全网最给力自动化教程)
欢迎您来阅读和练手!您将会从本章的详细讲解中,获取很大的收获!开始学习吧! 2.4 CSS定位2.5 SeleniumBuilder辅助定位元素2.6 操作元素(键盘和鼠标事件) 正文 2.4 CSS定位 前言 大部分人在使用selenium定…...
【C语言经典例题!】逆序字符串
目录 一、题目要求 二、解题步骤 ①递归解法 思路 完整代码 ②循环解法 思路 完整代码 嗨大家好! 本篇博客中的这道例题,是我自己在一次考试中写错的一道题 这篇博客包含了这道题的几种解法,以及一些我自己对这道题的看法ÿ…...
21 - 二叉树(三)
文章目录1. 二叉树的镜像2. 判断是不是完全二叉树3. 完全二叉树的节点个数4. 判断是不是平衡二叉树1. 二叉树的镜像 #include <ctime> class Solution {public:TreeNode* Mirror(TreeNode* pRoot) {// write code hereif (pRoot nullptr) return pRoot;//这里记得要记得…...
【A-Star算法】【学习笔记】【附GitHub一个示例代码】
文章目录一、算法简介二、应用场景三、示例代码Reference本文暂学习四方向搜索,一、算法简介 一个比较经典的路径规划的算法 相关路径搜索算法: 广度优先遍历(BFC)深度优先遍历(DFC)Di jkstra算法&#…...
纽扣电池澳大利亚认证的更新要求
澳大利亚强制性安全和信息标准草案具体规定了对含有纽扣电池和纽扣电池以 及纽扣电池和纽扣电池本身的消费品的要求, 适用范围 1.本法规适用于: 纽扣锂电池(任何尺寸和类型); 直径为16毫米或以上的纽扣锂电池: 一起提供的纽扣电池(未预先安装在产品中)。 2.但是&…...
零代码零距离,明道云开放日北京站圆满结束
文/麦壁瑜 编辑/李雨珂 2023年3月17日,为期一天的明道云开放日北京站圆满结束。本次开放日迎来超过100名伙伴和客户现场参会,其中不乏安利、通用技术集团、民生银行、迈外迪、DELSK集团、中国人民养老保险、北京汽车等知名企业代表。北京大兴机场、作业…...
第五章Vue路由
文章目录相关理解vue-router的理解对SPA应用的理解路由的理解基本路由几个注意点嵌套路由——多级路由路由query参数命名路由路由的params参数路由的props配置路由跳转的replace方法编程式路由导航缓存路由组件路由组件独有的生命钩子activated和deactivated路由守卫全局路由守…...
Git常用指令
Git是什么: Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS),分为两种类型的仓库: 本地仓库和远程仓库 第一步先新建仓库,本地 init ,然后提交分枝 链接仓库…...
Java每日一练(20230329)
目录 1. 环形链表 II 🌟🌟 2. 基础语句 ※ 3. 最小覆盖子串 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 环形…...
【面试题】JS的一些优雅写法 reduce和map
大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 JS的一些优雅写法 reduce 1、可以使用 reduce 方法来实现对象数组中根据某一key值求和 …...
【蓝桥杯真题】包子凑数(裴蜀定理、动态规划、背包问题)
题意 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。 每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干…...
一种免费将PDF转word的方式
pdf转word的需求对我来说很重要,我经常会有PDF转word的方式,但是网上搜索到的方式,要么收费、要么限制pdf大小或者限制转换次数。这里我分享一种免费转换的方式:用Acrobat Pro 来做转换。Adobe Acrobat Pro拥有强大的功能…...
MyBatis-面试题
文章目录1.什么是MyBatis?2.#{}和${}的区别是什么?3.MyBatis的一级、二级缓存4.MyBatis的优缺点5.当实体类中的属性名和表中的字段名不一样 ,怎么办 ?6.模糊查询like语句该怎么写?7.Mybatis是如何进行分页的?分页插件的原理是什…...
jQuery一些问题和ajax操作
jQuery语法: 文档就绪事件:文档加载之后运行jQuery代码,相当于jQuery的入口函数。 $(document).ready(function(){// 开始写 jQuery 代码...}); 简写: $(function(){// 开始写 jQuery 代码...}); jQuery选择器: …...
Pytorch构建自己的数据集
1.Pytorch内置的Dataset Pytorch中内置了许多数据集,我们可以从torchvision库中进行导入。比如,我们可以导入Fashion-MNIST数据集 import torch from torch.utils.data import Dataset from torchvision import datasets from torchvision.transforms …...
信息论小课堂:纠错码(海明码在信息传输编码时,通过巧妙的信道编码保证有了错误能够自动纠错。)
文章目录 引言I 纠错1.1 信息纠错的前提:信息冗余1.2 发现抄写错误的方法1.3 计算机的信息校验原理:奇偶校验1.4 有效的纠错编码II 案例2.1 例子1:自身DNA的编码2.2 例子2:海明码引言 预则立,不预则废:不确定性是我们这个世界自然的属性,在解决问题之前,要考虑到世界的不…...
MySQL执行计划(explain)
MySQL执行计划(explain) 1.什么是执行计划 2.如何分析执行计划 执行计划一共有12列,每一列都有着特殊的含义,接下来我们逐一分析 id select语句的查询顺序,包含一组数字,如果数字相同则从上到下,如果数字不同则从大到小。 select_type …...
思必驰回复第二轮审核问询,如何与科大讯飞、阿里巴巴“虎口夺食”?
数据智能产业创新服务媒体——聚焦数智 改变商业3月21日,思必驰科技股份有限公司(以下简称“思必驰”)更新上市申请审核动态,已回复上交所第二轮审核问询函,回复了涵盖关于实际控制人的认定、关于预计持续亏损及关于…...
ubuntu做网站服务器/网站推广优化外链
前言这几天拿到macbook就迫不及待的尝试了一下,刚开始前几天着实非常的不习惯。但是经过这几天的学习,感觉基本上掌握了其用法,马上就感觉这是一个生产代码、制作视频的利器。问过很多macbook的使用者都觉得用了很久不好用,安装的…...
重庆网站建设网络推广/企业网站的作用和意义
构造函数的特点:自动会被调动,自己不能主动调动构造函数 构造函数是拿一种整型数据来初始化对象,也就是内置类型 拷贝构造函数是拿一个对象去初始化另一个对象空间,存活在1.实参对象和形参对象结合时,2.return 返回一个…...
怎么用centos做网站/怎么制作网站二维码
写在前面:曾经每月最困扰我的事情是如何找到个案?个案从哪里来?没有适合开案的对象怎么办?不管有多少困难,可指标在那里,我必须要完成相应数量的个案服务工作,在这样的背景下,我慢慢…...
公司可以做网站吗/亚马逊seo推广
页面效果 场景: 比如使用layui.table数据表格显示了所有项目数据,客户数据对应另外的表数据集合,现在需要修改客户名称,需要把数据回显到表单中,然后进行修改 实现 <div class"layui-form-item"><label class…...
网站建设微信运营公司/口碑营销5t
当前行业提供的大部分人工智能数据都以朗读式训练数据为主,然而人与机器之间的交互不应该只是一问一答的简单对话或者命令控制,而是要理解语言的上下文,识别人的情感需求并做出相应的反馈”。 随着技术突破带来的用户体验的提升,…...