【第二十二课】最短路:多源最短路floyd算法(acwing-852 spfa判断是否存在负环 / acwing-854 / c++代码)

目录

acwing-852 

代码如下 

一些解释 

acwing-854

foyld算法思想

代码如下

一些解释


acwing-852 

在spfa求最短路的算法基础上进行修改。

代码如下 

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=2010,M=10010;int n,m;
int h[N],e[M],ne[M],w[M],idx;
int dist[N],cnt[N];
bool st[N];
void add(int a,int b,int c)
{e[idx]=b;ne[idx]=h[a];w[idx]=c;h[a]=idx++;
}
bool spfa()
{queue<int> q;for(int i=1;i<=n;i++){st[i]=1;q.push(i);}while(!q.empty()){int t=q.front();q.pop();st[t]=0;for(int i=h[t];i!=-1;i=ne[i]){int j=e[i];if(dist[j]>dist[t]+w[i]){dist[j]=dist[t]+w[i];cnt[j]=cnt[t]+1;if(cnt[j]>=n)return 1;if(!st[j]){q.push(j);st[j]=1;}}}}return 0;
}
int main()
{cin>>n>>m;memset(h,-1,sizeof h);while(m--){int a,b,c;cin>>a>>b>>c;add(a,b,c);}if(spfa())puts("Yes");else puts("No");return 0;
}

一些解释 

图中左边表示求最短路的函数 右边是判断是否存在负环的代码。对修改的地方都做了解释,相信应该很清楚啦 

1.dist数组:

在这段代码中,dist数组是用来存储每个节点的最短距离的。但是由于所有节点在开始时都被加入到了队列中,所以在算法的执行过程中,dist数组会被逐步更新。也就是说,即使我们没有显式地初始化dist数组,它的值也会在算法的执行过程中被正确地计算出来。

我们可以理解为dist数组存的是图中其他顶点到该点的距离中,最短的那个距离。也算是过程中顺便求了一遍多源最短路问题。

2. if(cnt[j]>=n)return 1;

抽屉原理是一个基本的组合数学原理,简单来说就是:如果有n个抽屉和n+1个物品,那么至少有一个抽屉里会有两个或更多的物品。

在这段代码中,cnt[j]表示从任意节点到节点j的最短路径中 边的数量。如果cnt[j]大于等于节点的总数n,那么说明至少有一个节点被访问了两次,这意味着存在一个环。

acwing-854

foyld算法思想

通过遍历所有可能的中间节点,检查是否存在一条路径通过这个中间节点可以使得某对节点之间的距离更短。

由于所有顶点都有可能是其他路径上的中间节点,因此我们对于每个节点对的遍历要经过n次。(外层循环)

内层的两个循环的作用就是遍历所有顶点对。 

代码如下

思想明白之后,代码应该不难理解。 

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=210,INF=1e9;
int d[N][N];//二维矩阵存储稠密图 
int n,m,q;
void floyd()
{for(int k=1;k<=n;k++)//k作为中间节点{for(int i=1;i<=n;i++)//遍历所有的节点对(i, j){for(int j=1;j<=n;j++){d[i][j]=min(d[i][j],d[i][k]+d[k][j]);}}}
}
int main()
{cin>>n>>m>>q;//d[i][j]表示i j两点之间的最短距离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;            }}while(m--){int a,b,w;cin>>a>>b>>w;d[a][b]=min(d[a][b],w);//处理重边}floyd();while(q--)//处理询问{int a,b;cin>>a>>b;if(d[a][b]>INF/2)puts("impossible");else cout<<d[a][b]<<endl;}return 0;
}

一些解释

if(d[a][b]>INF/2)puts("impossible");else cout<<d[a][b]<<endl;

用d[a][b]>INF/2来作为是否存在最短距离的条件:

//存在负权边,所以距离为inf也会被更新.

这句解释我更能理解一点hh.

下面是bing的解释 

关于这个问题我不太确定qwq欢迎交流指点


好啦,最短路问题也算是写完了。

有问题欢迎指出,一起加油!!! 

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

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

相关文章

百分点科技:《数据科学技术: 文本分析和知识图谱》

科技进步带来的便利已经渗透到工作生活的方方面面&#xff0c;ChatGPT的出现更是掀起了新一波的智能化浪潮&#xff0c;推动更多智能应用的涌现。这背后离不开一个朴素的逻辑&#xff0c;即对数据的收集、治理、建模、分析和应用&#xff0c;这便是数据科学所重点研究的对象——…

Python itertools模块:生成迭代器(实例分析)

itertools 模块中主要包含了一些用于生成迭代器的函数。在 Python 的交互式解释器中先导入 itertools 模块&#xff0c;然后输入 [e for e in dir(itertools) if not e.startswith(_)] 命令&#xff0c;即可看到该模块所包含的全部属性和函数&#xff1a; >>> [e for …

【单片机毕业设计6-基于stm32c8t6的智能衣柜系统】

【单片机毕业设计6-基于stm32c8t6的智能衣柜系统】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇6基于stm32的智能衣柜系统 &#x1f9ff;创作不易&#xff0c;拒绝白嫖可私 一、功能介绍 -------------------…

Vue 上门取件时间组件

本文使用vue2.0elementui 制作一个上门取件时间组件&#xff0c;类似顺丰&#xff0c;样式如下&#xff1a; 大概功能&#xff1a;点击期望上门时间&#xff0c;下面出现一个弹框可以选择时间&#xff1a; 首先我们定义一些需要的数据&#xff1a; data() {return {isDropdown…

Java 集合List相关面试题

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于java面试题系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基…

C++ 动态规划 分组背包问题

有 N 组物品和一个容量是 V 的背包。 每组物品有若干个&#xff0c;同一组内的物品最多只能选一个。 每件物品的体积是 vij &#xff0c;价值是 wij &#xff0c;其中 i 是组号&#xff0c;j 是组内编号。 求解将哪些物品装入背包&#xff0c;可使物品总体积不超过背包容量&a…

2024美赛数学建模ABCDEF题思路代码

--------------------2024美国大学生数学建模竞赛&#xff08;美赛&#xff09;思路&代码---------------------------- 赛题翻译&#xff1a;2024美赛ABCDEF赛题翻译 问题A&#xff08;数据分析题&#xff09;&#xff1a;资源可用性和性别比例&#xff08;MCM&#xff09…

【华为】GRE Over IPsec 实验配置

【思科】GRE Over IPsec 实验配置 前言报文格式 实验需求配置拓扑GRE配置步骤IPsec 配置步骤R1基础配置GRE 配置IPsec 配置 ISP_R2基础配置 R3基础配置GRE 配置IPsec 配置 PCPC1PC2 抓包检查OSPF建立GRE隧道建立IPsec 隧道建立Ping 配置文档 前言 GRE over IPSec可利用GRE和IP…

分享一个Python网络爬虫数据采集——电商API接口数据采集

前言 你是否曾为获取重要数据而感到困扰&#xff1f;是否因为数据封锁而无法获取所需信息&#xff1f;是否因为数据格式混乱而头疼&#xff1f;现在&#xff0c;所有这些问题都可以迎刃而解。【API接口数据采集】 公共参数 请求地址: 申请调用KEY测试 名称类型必须描述keyStr…

人工智能基础-Numpy的arg运算-Fancy Indexing-比较

索引 获取最小值最大值索引 np.argmin(x) np.argmax(x)排序和使用索引 np.sort(x)Fancy Indexing 索引 二维数组的应用 numpy.array 的比较 比较结果和Fancy Indexing

2023年度总结 | 关于意义,爱与回望——写给清醒又无知的20岁

Hi&#xff0c;大家好&#xff0c;我是半亩花海&#xff0c;一名再普通不过的大学生。2023年&#xff0c;20岁&#xff0c;充实而零乱的一年&#xff0c;清醒又无知的一年。年末&#xff0c;最近的一些事儿也让我逐渐地有感而发&#xff0c;心静&#xff0c;除杂&#xff0c;思…

Linux环境基础开发工具使用篇(一) yum 与 vim

目录 一、软件包管理器 yum 1. yum的概念和对yum整个生态的理解 Linux安装软件的三种方式: 对yum和yum整个生态的理解: 2.yum的使用 ①yum源 ②yum安装软件 ③yum源更新 二、文本编辑器 vim 1.vim常用模式 2.详谈每种模式: (1)插入模式 (2)底行模式 ①退出vim ②…

知识融合:构建、应用与挑战

目录 前言1 知识图谱构建的挑战1.1 异构性挑战1.2 知识体系复杂性 2 知识图谱应用的挑战2.1 信息交互的普遍性2.2 映射的生成问题 3 异构的原因3.1 语法、逻辑和原语异构3.2 模型异构与概念化 4 知识图谱数据的特点4.1 形式灵活与可扩展性4.2 含有丰富语义与可推理性 5 知识融合…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第6章 逻辑斯谛回归与最大熵模型(1)6.1 逻辑斯谛回归模型

文章目录 第6章 逻辑斯谛回归与最大熵模型6.1 逻辑斯谛回归模型6.1.1 逻辑斯谛分布6.1.2 二项逻辑斯谛回归模型6.1.3 模型参数估计6.1.4 多项逻辑斯谛回归 《统计学习方法&#xff1a;李航》笔记 从原理到实现&#xff08;基于python&#xff09;-- 第3章 k邻近邻法 《统计学习…

2024年网络安全就业宝典

国际研究机构Gartner会在每年10月份左右发布下一年度的战略发展趋势预测&#xff0c;并在次年3月左右发布和网络安全相关的趋势预测。绿盟科技通过将近3年的趋势预测进行分组对比分析后发现&#xff0c;除了众人皆知的AI技术应用外&#xff0c;数据模块化、身份优先安全、行业云…

手写RPC框架

RPC框架核心组件 对于RPC框架简洁模式下&#xff0c;主要有以下角色&#xff0c;暂且抛开心跳机制以及负载均衡等复杂策略&#xff0c;我们先来自己实现一个RPC框架&#xff0c;后面我们再深入理解。 注册中心 RegisterServiceVo package com.cover.rpc.remote.vo;import …

【PCL】(九)点云体素下采样

&#xff08;九&#xff09;Filtering 体素下采样 点云样例&#xff1a; https://raw.github.com/PointCloudLibrary/data/master/tutorials/table_scene_lms400.pcd 以下程序实现对读取的点云进行体素下采样&#xff0c;并将得到的点云保存。 voxel_grid.cpp #include <…

CSS是一门需要单独学习的技术吗?

CSS (Cascading Style Sheets) &#xff0c;做前端开发的人都很清楚&#xff0c;因为这是他们的一项必不可少的技能。我以前也是知道CSS&#xff0c;但从来没有单独学习过&#xff0c;认为就它只是用来渲染网页的表现层效果&#xff0c;定制页面和内元素的布局、颜色和字体等&a…

QT 应用中集成 Sentry

QT 应用中集成 Sentry QT应用中集成 SentrySentry SDK for C/C注册 Sentry 账号QT 应用中集成 Sentry触发 Crash 上报 QT应用中集成 Sentry Sentry 是一个开源的错误监控和日志记录平台&#xff0c;旨在帮助开发团队实时捕获、跟踪和解决软件应用程序中的错误和异常。它提供了…

【ADI 知识库】 AN-1354:集成式ZIF、RF至比特、LTE、广域接收机分析和测试结果

官方链接&#xff1a; https://www.analog.com/cn/resources/app-notes/an-1354.html 简介 本应用笔记参考了3GPP TS 36系列文件和ADI公司的多种数据手册、特性标定报告和实验室测试结果。本文重点关注基于集成式零中频(ZIF)、RF至比特、IC (AD9371)的多载波广域LTE接收机的性…