当前位置: 首页 > news >正文

图论---Bellman-Ford算法

适用场景:有边数限制 ->(有负环也就没影响了),存在负权边,O( n * m );

有负权回路时有的点距离会是负无穷,因此最短路存在的话就说明没有负权回路。

从1号点经过不超过k条边到每个点的距离。

若经过n次迭代,有更新的话(经过n+1个点了)就说明存在负环(一般不用其来求,用SPFA来判断负环)。

只有负环在1号点到n号点的路径上时,最短路才会不存在,在别的路上不影响。

有负环不会死循环,但是值可能会很小

#include<bits/stdc++.h>
using namespace std;
const int N=510,M=10010;
int n,m,k;
int dist[N],backup[N];
struct edge{int a,b,w;
}edges[N];
int bellman_ford(){memset(dist,0x3f,sizeof dist);dist[1]=0;for(int i=0;i<k;++i){memcpy(backup,dist,sizeof dist);//每次更新时只用上一次更新的结果for(int j=0;j<m;++j){int a=edges[j].a,b=edges[j].b,w=edges[j].w;dist[b]=min(dist[b],backup[a]+w);}}if(dist[n]>0x3f3f3f3f / 2 ) return -1; //除2的原因是可能存在负权边return dist[n];
}
int main(){scanf("%d%d%d",&n,&m,&k);for(int i=0;i<m;++i){int a,b,w;scanf("%d%d%d",&a,&b,&w);edges[i]={a,b,w};}int t=bellman_ford();if(t==-1) puts("impossible");else printf("%d\n",t);return 0;
}

相关文章:

  • Excel处理控件Spire.XLS系列教程:Java设置Excel活动工作表或活动单元格
  • 拼团退款中采用分片处理降低对数据库
  • Java String对象创建过程
  • Rk3568平台通过Jni读取摄像头当前状态值实践案例
  • 【一览表】病理图像处理流程
  • Linux:进程的创建进程的终止
  • ShenNiusModularity项目源码学习(21:ShenNius.Admin.Mvc项目分析-6)
  • 12N60-ASEMI无人机专用功率器件12N60
  • 【多智能体系统组织方式解析】五大架构赋能智能协作
  • 【办公类-89-02】20250424会议记录模版WORD自动添加空格补全下划线
  • Java 调用webservice接口输出xml自动转义
  • std::unorderd_map 简介
  • NestJS——使用TypeORM操作数据库、增删改查、关联查询、QueryBuilder
  • 黑马 redis面试篇笔记
  • ROS-真机向虚拟机器人映射
  • zip是 Python 中 `zip` 函数的一个用法
  • PageView 内嵌套 TabBarView 的滑动冲突
  • 【C++指南】位运算知识详解
  • 利用软件I2C驱动OLED,点亮、熄灭OLED屏幕以及获取当前OLED屏幕开启状态
  • 【蓝桥杯】水质检测
  • 与包乐史驾帆航行|航海、钓鱼和写书:一个记者的再就业之路
  • 更好发挥汽车产业在扩投资促消费方面的带动作用!陈吉宁调研上海车展
  • A股三大股指集体高开,黄金股大幅回调
  • 泡泡玛特一季度整体收入同比增超1.6倍,海外收入增近5倍
  • 印度空军计划增购40架法制“阵风”战机,此前已购买36架
  • 合肥打造全球首个无人艇超级工厂,请看《浪尖周报》第21期