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

代码随想录冲冲冲 Day58 图论Part9

47. 参加科学大会(第六期模拟笔试)

根据昨天的dijkstra进行堆优化

使用的原因是点多但边少 所以直接对于边进行操作

1.对于priority_queue来说

这是最小堆, 小于的话就是最大堆

之后由于是根据边来说的 所以新建一个Edge并且初始化一下

之后由于使用了priority_queue来构造最小堆,在加上传入queue中的都是一个点以及点到原点的距离,根据自定义的判断公式,已经默认排好了最小也就是离得最近的。所以每次只要top后 pop掉就可以了

下面的判断是为了避免1 -> 2 -> 3 ->1这种的成环情况

之后就是去更新值 在更新完之后会把还没有访问到的 cur的邻边放入queue中

卡码网KamaCoder

94. 城市间货物运输 I

bellman_ford算法 使用场景是图中有负权重时可以使用

1.什么是松弛

每条边有起点、终点和边的权值。例如一条边,节点A 到 节点B 权值为value,如图:

minDist[B] 表示 到达B节点 最小权值,minDist[B] 有哪些状态可以推出来?

状态一: minDist[A] + value 可以推出 minDist[B] 状态二: minDist[B]本身就有权值 (可能是其他边链接的节点B 例如节点C,以至于 minDist[B]记录了其他边到minDist[B]的权值)

minDist[B] 应为如何取舍。

本题我们要求最小权值,那么 这两个状态我们就取最小的

if (minDist[B] > minDist[A] + value) minDist[B] = minDist[A] + value

也就是说,如果 通过 A 到 B 这条边可以获得更短的到达B节点的路径,即如果 minDist[B] > minDist[A] + value,那么我们就更新 minDist[B] = minDist[A] + value ,这个过程就叫做 “松弛” 。

对所有边松弛一次,相当于计算 起点到达 与起点一条边相连的节点 的最短距离

如图有n个节点 就松弛n-1次

然后基于

if (minDist[from] != INT_MAX && minDist[to] > minDist[from] + price) { minDist[to] = minDist[from] + price; 

这个核心公式继续更新

另外一点是如果松弛次数大于了n-1就不会继续更新了

http://www.lryc.cn/news/447879.html

相关文章:

  • UnityHub下载任意版本的Unity包
  • 网站服务器怎么计算同时在线人数?
  • [spring]MyBatis介绍 及 用MyBatis注解操作简单数据库
  • Ks渲染做汽车动画吗?汽车本地渲染与云渲染成本分析
  • AI智能时代:哪款编程工具让你的工作效率翻倍?
  • 这五本大模型书籍,让你从大模型零基础到精通,非常详细收藏我这一篇就够了
  • 面试经典150题 堆
  • day-62 每种字符至少取 K 个
  • 免费好用!AI声音克隆神器,超级简单,10秒就能克隆任何声音!(附保姆级教程)
  • LeetCode146 LRU缓存
  • 【Java】包装类【主线学习笔记】
  • 华为HarmonyOS地图服务 11 - 如何在地图上增加点注释?
  • uniapp js怎么根据map需要显示的点位,计算自适应的缩放scale
  • Mysql 架构
  • C语言 | Leetcode C语言题解之第429题N叉树的层序遍历
  • Python中列表常用方法
  • 『功能项目』下载Mongodb【81】
  • 图像特征提取-SIFT
  • ElasticSearch分页查询性能及封装实现
  • Python精选200Tips:176-180
  • 【Kotlin 集合概述】可变参数vararg、中缀函数infix以及解构声明(二十)
  • unity安装报错问题记录
  • 秋招|面试|群面|求职
  • 【Kubernetes】日志平台EFK+Logstash+Kafka【理论】
  • 基于SpringBoot+Vue+MySQL的教学资料管理系统
  • 动态规划day45:编辑距离|115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离(动规终极好题)
  • 剑指 offer 刷题集
  • C++在线开发环境搭建(WEBIDE)
  • 重磅首发!大语言模型LLM学习路线图来了!
  • neo4j关系的创建删除 图的删除