最短路问题中的bellman-ford算法

最短路问题中的bellman-ford算法

  • 题目

在这里插入图片描述

如果要处理单源最短路问题当中存在负权边的,那么就需要用到 bellman-ford算法和SPFA算法,一般情况下都是用 SPFA算法,除了有边数限制的情况只能用bellman-ford算法,比如下面这种

题目

给定一个 n n n 个点 m m m 条边的有向图,图中可能存在重边和自环, 边权可能为负数

请你求出从 1 1 1 号点到 n n n 号点的最多经过 k k k 条边的最短距离,如果无法从 1 1 1 号点走到 n n n 号点,输出 impossible

注意:图中可能 存在负权回路

输入格式

第一行包含三个整数 n , m , k n,m,k n,m,k

接下来 m m m 行,每行包含三个整数 x , y , z x,y,z x,y,z,表示存在一条从点 x x x 到点 y y y 的有向边,边长为 z z z

点的编号为 1 ∼ n 1 \sim n 1n

输出格式

输出一个整数,表示从 1 1 1 号点到 n n n 号点的最多经过 k k k 条边的最短距离。

如果不存在满足条件的路径,则输出 impossible

数据范围

1 ≤ n , k ≤ 500 1 \le n,k \le 500 1n,k500,
1 ≤ m ≤ 10000 1 \le m \le 10000 1m10000,
1 ≤ x , y ≤ n 1 \le x,y \le n 1x,yn
任意边长的绝对值不超过 10000 10000 10000

输入样例:

3 3 1
1 2 1
2 3 1
1 3 3

输出样例:

3

在这里插入图片描述

对于bellman-ford算法,需要用到结构体数组来存储边的情况,数组last在一会用到的时候就能看出来它的作用

建图环节:
在这里插入图片描述
将所有的边存到结构体数组当中


在这里插入图片描述

在执行函数后,与dijkstra算法不同的是,这里dist[n] 只要 大于 正无穷大的一半就被判定为 是不通的。

这是因为,首先有了负权边的出现,而且该算法是遍历所有的边,所以正无穷大可能会被更新,会比原来小一点,但不会小太多。

在这里插入图片描述
首先还是设置正无穷,接着经历 k 层循环,每次将 dist拷贝到 last。

接着遍历所有的边,每次更新用 last数组更新,这是因为 如果用dist 更新,就会很容易突破边数的限制,比如被1号点更新的2号点刚好有能更新3号点,但是如果2号点没有被更新,3号点更新不了,那么这种情况下,就会很容易突破边数限制。


完整代码如下:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>using namespace std;const int N = 510, M = 10010;struct Edges{int a, b, c;
} edges[M];int dist[N];
int last[N];int n, m, k;void bellman_ford()
{memset(dist, 0x3f, sizeof dist);dist[1] = 0;for (int i = 0; i < k; i++){memcpy(last, dist, sizeof dist);for (int j = 0; j < m; j++){int a = edges[j].a;int b = edges[j].b;int c = edges[j].c; dist[b] = min(dist[b], last[a] + c);}}
}int main()
{scanf("%d%d%d", &n, &m, &k);for (int i = 0; i < m; i++){int a, b, c;scanf("%d%d%d", &a, &b, &c);edges[i] = {a, b, c};}bellman_ford();if (dist[n] > 0x3f3f3f3f / 2) puts("impossible");else printf("%d", dist[n]);return 0;
}

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

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

相关文章

混合密度网络Mixture Density Networks(MDN)

目录 简介1 介绍2 实现3 几个MDN的应用&#xff1a;参考 简介 平方和或交叉熵误差函数的最小化导致网络输出近似目标数据的条件平均值&#xff0c;以输入向量为条件。对于分类问题&#xff0c;只要选择合适的目标编码方案&#xff0c;这些平均值表示类隶属度的后验概率&#x…

《程序猿入职必会(10) · SpringBoot3 整合 MyBatis-Plus》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

Linux中DHCP服务器配置和管理

文章目录 一、DHCP服务1.1、DHCP的工作流程1.2、DHCP的工作模式1.3、dhcp的主要配置文件 二、安装DHCP服务2.1、更新yum源2.2、安装DHCP服务软件包2.3、配置DHCP服务2.4、启用DHCP服务&#xff08;解决报错&#xff09;2.4.1、查看dhcpd服务的状态和最近的日志条目2.4.2、查看与…

【网络安全】探索AI 聊天机器人工作流程实现RCE

未经许可,不得转载。 文章目录 前言正文前言 我发现了一个广泛使用的AI聊天机器人平台中的远程代码执行漏洞。该漏洞存在于聊天机器人的自定义工作流响应代码中,这些工作流允许开发人员通过创建定制的流程来扩展机器人的功能。 正文 在浏览自动化聊天机器人的多个特定功能…

AI界的“小钢炮“:MiniCPM-V 2.6 版本震撼发布!

MiniCPM-V 2.6 面壁智能推出了一款颠覆性的端侧AI多模态模型——MiniCPM-V 2.6。这个被亲切地称为"小钢炮"的模型&#xff0c;以其惊人的性能和极致的效率&#xff0c;向业界巨头发起了挑战。 MiniCPM-V 2.6 MiniCPM-V 2.6 是 MiniCPM-V 系列中最新、性能最佳的模型。…

算法板子:匈牙利算法——二分图的最大匹配

目录 1. 基础概念 &#xff08;1&#xff09;二分图的概念 &#xff08;2&#xff09; 匈牙利算法的作用 2. 代码 1. 基础概念 &#xff08;1&#xff09;二分图的概念 顶点集 V 分为两个集合&#xff0c;且图中每条边依附的两个顶点都分属于这两个子集&#xff0c;也就是第…

《UniverSeg: Universal Medical Image Segmentation》ICCV2023

摘要 这篇论文提出了一种名为 UniverSeg 的方法&#xff0c;它能够解决未见过的医学图像分割任务&#xff0c;而无需额外的训练。现有的深度学习模型通常无法泛化到新的解剖结构、图像模式或标签上。UniverSeg 利用一种新的 CrossBlock 机制&#xff0c;通过查询图像和定义新分…

倍福PLC数据 转 CCLink IE Field Basic项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 设置倍福PLC 2 5 配置网关参数采集倍福PLC数据 4 6 使用CCLINK协议转发数据 7 7 三菱PLC连接网关的CCLINK的设置 8 8 案例总结 12 1 案例说明 设置倍福PLC&#xff0c;开通ADS通信设置网关采集倍福PLC数据把采集的数…

小巧免费的笔记本电池检测工具

BatteryInfoView是一款免费的笔记本电池检测软件&#xff0c;适用于笔记本电脑和上网本。该软件能够提供电池的详细信息&#xff0c;包括电池名称、制造商名称、序列号、制造日期、电源状态&#xff08;充电/放电&#xff09;、当前电池容量、完全充电容量、设计容量、充电放电…

RAG私域问答场景超级详细方案(第一期方案)[1]:工业级别构建私域问答(知识处理、知识召回排序、搜索问答模块)

RAG私域问答场景整体夏详细方案(第一期方案):工业级别构建私域问答(知识处理、知识召回排序、搜索问答模块) 大模型性能的跳阶式增长给文本摘要、信息检索、信息抽取、语义问答等自然语言处理任务带来了卓越的性能提升。同时,LangChain 作为一种基于 LLM 的框架,能够快速…

基础岛 - 8G显存验证书生·浦语大模型的Demo

因为以前用过LMDeploy&#xff0c;所以本章的内容相对熟悉。 另外&#xff0c;因为教程写的很详细保姆级&#xff0c;所以大多数情况直接复制执行命令即可。开发机的创建略过。 总体验证结论&#xff1a; LMDeploy的模型加载有点慢&#xff0c;但推理速度快&#xff0c;符合预…

第三方软件检测机构服务类型

在信息技术飞速发展的今天&#xff0c;软件产品的质量已成为企业竞争力的重要组成部分。卓码软件测评这家第三方软件检测机构致力于提供一流的软件测试服务&#xff0c;帮助企业确保其软件产品的可靠性和安全性。 一、项目验收测试&#xff1a;确保交付质量   项目验收测试是…

【Nuxt】配置

runtimeConfig 运行时配置 // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({compatibilityDate: 2024-04-03,devtools: {enabled: true},runtimeConfig: {appKey: process.env.APP_KEY,public: {baseUrl: process.env.BASE_URL,}} …

suse SLE 12 SP3 安装 GeForce GT 730 显卡驱动

文章目录 [toc]获取驱动安装显卡驱动验证显卡驱动 获取驱动 浏览器打开 NVIDIA Official Drivers &#xff0c;找到自己对应的驱动&#xff0c;然后查询和下载 安装显卡驱动 下载完成后&#xff0c;有一个 .run 文件&#xff0c;可以直接 bash 执行&#xff0c; bash NVIDIA-Li…

Java每日一题———删除有序数组中的重复项

这个问题可以通过使用双指针技术来解决。我们可以使用两个指针&#xff0c;一个慢指针 slowRunner 用于跟踪新数组的末尾&#xff0c;另一个快指针 fastRunner 用于遍历数组。每当 fastRunner 遇到一个新的唯一元素时&#xff0c;就将其复制到 slowRunner 指向的位置&#xff0…

力扣——11.盛最多水的容器

题目 暴力解 思路&#xff1a; 遍历每一个可能组成的容器&#xff0c;然后计算比较最大值。 代码&#xff1a; int maxArea(vector<int>& height) {int z1 0, z2 0;int len height.size();int val 0;for (z1; z1 < len - 1; z1) {for (z2 z1 1; z2 < l…

将tsx引入vue

按钮 vue <cl-batch-btn >新增批量</cl-batch-btn> import batch from "//modules/ad/components/ uploading/batch.vue" import ClBatchBtn from "/~/crud/src/components/batch-btn"; tsx

ViT论文详解

文章目录 前言一、ViT理论二、模型结构三、实验结果总结 前言 ViT是谷歌团队在2021年3月发表的一篇论文&#xff0c;论文全称是《AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》一张图片分成16x16大小的区域&#xff1a;使用Transformer进行按比…

Arch Linux - 2-安装中文输入法

文章目录 2 安装中文输入法2.0 准备2.0.1 前置条件2.0.2 建议 2.1 方案一&#xff1a;RimeIBus2.1.1 安装&配置2.1.2 添加输入法 2.2 方案二&#xff1a;IBusLibpinyin 2 安装中文输入法 2.0 准备 2.0.1 前置条件 预装gnome # 安装 pacman -S gnome# 设置开机自启动 sy…

【博客22】缤果Android_USB串口调试助手V1.0(高级篇)

超级好用的Android_USB调试助手 ( Android Studio Java) 开发工具: android-studio-2022.2.1.20-windows.exe usb-serial-for-android 目录 一、软件概要&#xff1a; 二、软件界面&#xff1a; 1.App演示 2.其他扩展展示 2.1 USB枚举 2.2 波特率 2.3 自定义指令集 2.…