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

代码随想录算法训练营第六十天|Bellman_ford 队列优化算法、Bellman_ford之判断负权回路、bellman_ford之单源有限最短路

参考文章均来自代码随想录Bellman_ford 队列优化算法参考文章链接对第 59天中的题目进行优化 详细见参考文章推理步骤还是用邻接表#includeiostream#includevector#includequeue#includelist#includeclimitsusingnamespacestd;structEdge{//邻接表intto;// 链接的节点intval;// 边的权重Edge(intt,intw):to(t),val(w){}// 构造函数};intmain(){intn,m,p1,p2,val;cinnm;vectorlistEdgegrid(n1);vectorboolisInQueue(n1);// 加入优化已经在队里里的元素不用重复添加// 将所有边保存起来for(inti0;im;i){cinp1p2val;// p1 指向 p2权值为 valgrid[p1].push_back(Edge(p2,val));}intstart1;// 起点intendn;// 终点vectorintminDist(n1,INT_MAX);minDist[start]0;queueintque;que.push(start);while(!que.empty()){intnodeque.front();que.pop();isInQueue[node]false;// 从队列里取出的时候要取消标记我们只保证已经在队列里的元素不用重复加入for(Edge edge:grid[node]){intfromnode;inttoedge.to;intvalueedge.val;if(minDist[to]minDist[from]value){// 开始松弛minDist[to]minDist[from]value;if(isInQueue[to]false){// 已经在队列里的元素不用重复添加que.push(to);isInQueue[to]true;}}}}if(minDist[end]INT_MAX)coutunconnectedendl;// 不能到达终点elsecoutminDist[end]endl;// 到达终点最短路径}Bellman_ford之判断负权回路参考文章链接题目链接有负权回路的情况下一直都会有更短的最短路所以 松弛 第n次minDist数组 也会发生改变。那么解决本题的 核心思路就是在 kama94.城市间货物运输I 的基础上再多松弛一次看minDist数组 是否发生变化。#includeiostream#includevector#includelist#includeclimitsusingnamespacestd;intmain(){intn,m,p1,p2,val;cinnm;vectorvectorintgrid;for(inti0;im;i){cinp1p2val;// p1 指向 p2权值为 valgrid.push_back({p1,p2,val});}intstart1;// 起点intendn;// 终点vectorintminDist(n1,INT_MAX);minDist[start]0;boolflagfalse;for(inti1;in;i){// 这里我们松弛n次最后一次判断负权回路for(vectorintside:grid){intfromside[0];inttoside[1];intpriceside[2];if(in){if(minDist[from]!INT_MAXminDist[to]minDist[from]price)minDist[to]minDist[from]price;}else{// 多加一次松弛判断负权回路if(minDist[from]!INT_MAXminDist[to]minDist[from]price)flagtrue;}}}if(flag)coutcircleendl;elseif(minDist[end]INT_MAX){coutunconnectedendl;}else{coutminDist[end]endl;}}bellman_ford之单源有限最短路参考文章链接题目链接题目中描述是 最多经过 k 个城市的条件下而不是一定经过k个城市也可以经过的城市数量比k小但要最短的路径对所有边松弛一次相当于计算 起点到达 与起点一条边相连的节点 的最短距离本题是最多经过 k 个城市 那么是 k 1条边相连的节点bellman_ford 标准写法是松弛 n-1 次本题就松弛 k 1次就好#includeiostream#includevector#includelist#includeclimitsusingnamespacestd;intmain(){intsrc,dst,k,p1,p2,val,m,n;cinnm;vectorvectorintgrid;for(inti0;im;i){cinp1p2val;grid.push_back({p1,p2,val});}cinsrcdstk;vectorintminDist(n1,INT_MAX);minDist[src]0;vectorintminDist_copy(n1);// 用来记录上一次遍历的结果for(inti1;ik1;i){minDist_copyminDist;// 获取上一次计算的结果for(vectorintside:grid){intfromside[0];inttoside[1];intpriceside[2];// 注意使用 minDist_copy 来计算 minDistif(minDist_copy[from]!INT_MAXminDist[to]minDist_copy[from]price){minDist[to]minDist_copy[from]price;}}}if(minDist[dst]INT_MAX)coutunreachableendl;// 不能到达终点elsecoutminDist[dst]endl;// 到达终点最短路径}
http://www.gsyq.cn/news/1333408.html

相关文章:

  • 2026年最容易上手的5个AI副业
  • 智慧校园软件选型怎么避免踩坑?常见失败原因解析
  • ResNet18实战复盘:我在驾驶分心检测数据集上踩过的那些坑(数据增强、过拟合与可视化)
  • 告别黑箱:用MATLAB手把手教你在线辨识电池模型参数(附NEDC工况数据)
  • 2026虾火锅底料批发权威指南:高性价比供应商测评推荐 - 资讯速览
  • 时间序列自监督学习避坑指南:从SimCLR到MAE,三大流派怎么选?
  • 【计算机组成原理】无符号整数乘法原理(基于移位累加,零基础看懂CPU乘法)
  • 通过curl命令直接测试Taotoken多模型聚合API的响应
  • HTTPS单向认证、双向认证、抓包原理与反抓包策略详解
  • CLup使用:一键创建Doris存算一体集群
  • 聚英物联网云平台:数据互通,实现水利水电智能运维
  • 【行业趋势】软件测试的第三次革命:从手工、自动化到AI Agent驱动
  • ESP8266通过MQTT 3.1.1协议连接阿里云物联网平台实战指南
  • 订阅制养不活AI:一场关于“固定收入VS浮动成本”的错配游戏
  • 如何快速解锁教学控制:JiYuTrainer极域电子教室防控制完全指南
  • Claude Code 配置手册
  • 文献综述 AI 率为什么特别高?这款工具帮你文献综述 AI 率降到 5% 检测合格
  • 以太网口电路PCB设计实战:从原理到布局布线的完整指南
  • 虾火锅底料批发常见问题解答(2026最新专家版) - 资讯速览
  • Meta与牛津联手发布VGGT-Ω:用2000万视频喂出的「3D重建巨无霸」!
  • 花五分钟在NAS上搭了个Code-Server,结果成了我出场率最高的开发环境
  • 破解教育多重痛点,菩瓦纽课业平台以专业 AI 阅卷重塑智慧教学生态
  • 别再手动拉黑发件人了!用Python+深度学习模型,5步搞定智能垃圾邮件过滤器
  • 树状数组 - P2184 贪婪大陆
  • 科学引导搜索引擎蜘蛛,提升网站收录的实用方法
  • 全球数据治理:合规与AI双引擎驱动
  • MTK手机用上高通QC快充,背后多出的那颗‘xmusb350’芯片到底在忙啥?
  • Jetson Orin Nano刷机踩坑记:从‘dtc’缺失到‘sshpass’报错的完整修复指南
  • 2026年中频滚焊机源头厂家:解读行业核心趋势 - 资讯速览
  • 十大知识领域裁剪考量因素表