【Day50 LeetCode】图论问题 Ⅷ

一、图论问题 Ⅷ

1、dijkstra算法 堆优化

采用堆来优化,适合节点多的稀疏图。代码如下:

# include<iostream>
# include<vector>
# include<list>
# include<queue>
# include<climits>using namespace std;class mycomparison {
public:bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs) {return lhs.second > rhs.second;}
};int main(){int n, m;cin >> n >> m;int s, e, v;vector<list<pair<int, int>>> grid(n+1);for(int i=0; i<m; ++i){cin >> s >> e >> v;grid[s].push_back(pair<int, int>(e, v));}vector<int> minDist(n+1, INT_MAX);vector<bool> visited(n+1, false);int start = 1, end = n;minDist[start] = 0;priority_queue<pair<int, int>, vector<pair<int, int>>, mycomparison> pq;pq.push(pair<int, int>(start, 0));while(!pq.empty()){// 1、选取源点到未被访问过且距离最近的节点; auto cur = pq.top(); pq.pop();if(visited[cur.first])continue;// 2、将最近节点标记为访问过 visited[cur.first] = true;// 3、更新非访问节点到源点的距离for(auto edge : grid[cur.first]){if(!visited[edge.first] && minDist[edge.first] > minDist[cur.first] + edge.second )minDist[edge.first] = minDist[cur.first] + edge.second;pq.push(pair<int, int>(edge.first, minDist[edge.first]));}}if(minDist[end] < INT_MAX)cout << minDist[end] << endl;elsecout << -1 << endl;return 0;
}

2、Bellman_ford 算法

权值有负值的图无法采用dijdijkstra算法,这时需要使用Bellman_ford 算法来解决最短路问题。

#include <iostream>
#include <vector>
#include <list>
#include <climits>using namespace std;int main() {int n, m, p1, p2, val;cin >> n >> m;vector<vector<int>> grid;for(int i = 0; i < m; i++){cin >> p1 >> p2 >> val;grid.push_back({p1, p2, val});}int start = 1, end = n;  vector<int> minDist(n + 1 , INT_MAX);minDist[start] = 0;for (int i = 1; i < n; i++) { // 对所有边 松弛 n-1 次for (vector<int> &side : grid) { // 每一次松弛,都是对所有边进行松弛int from = side[0]; // 边的出发点int to = side[1]; // 边的到达点int price = side[2]; // 边的权值// 松弛操作 // minDist[from] != INT_MAX 防止从未计算过的节点出发if (minDist[from] != INT_MAX && minDist[to] > minDist[from] + price) { minDist[to] = minDist[from] + price;  }}}if (minDist[end] == INT_MAX)cout << "unconnected" << endl; // 不能到达终点elsecout << minDist[end] << endl; // 到达终点最短路径return 0;
}

参考资料
代码随想录

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

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

相关文章

利用node.js搭配express框架写后端接口(一)

Node.js 凭借其高效的非阻塞 I/O 操作、事件驱动架构以及轻量级的特点&#xff0c;成为了开发高性能服务器应用的热门选择。Express 框架作为 Node.js 上最流行的 Web 应用框架之一&#xff0c;以其简洁的 API 和丰富的中间件生态系统&#xff0c;极大地简化了 Web 后端开发流程…

【小白数学】为什么可以用拉格朗日乘子法求函数的极值【二】

我们在上一篇【小白数学】- 为什么可以用拉格朗日乘子法求函数的极值【一】已经介绍了一种较为“严谨“的方法来说明为什么拉格朗日乘子法可以帮助我们求具有等式约束条件下的函数的极值。虽然在我们的例子中”等式约束“中只有一个等式。但其实很容易推广到多个等式约束的情况…

JAVA面试_进阶部分_netty面试题

1.BIO、NIO 和 AIO 的区别&#xff1f; BIO&#xff1a;一个连接一个线程&#xff0c;客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。 伪异步 IO&#xff1a;将请求连接放入线程池&#xff0c;一对多&#xff0c;但线程还是很宝贵的资源。 NIO&#x…

考研出分24小时,人类精神状态图鉴

2月24日&#xff0c;上午10点起&#xff0c;各省考研初试成绩陆续公布&#xff0c;考生们或紧张的输入准考证号&#xff0c;或抱团等待“审判”。然而更魔幻的还在后头——下午4点&#xff0c;教育部竟在同一天直接发布了《2025年研考国家分数线》。 不少网友表示&#xff1a;…

川翔云电脑优势总结

在数字化时代&#xff0c;川翔云电脑依托云计算技术&#xff0c;为用户解决硬件性能瓶颈问题。川翔云电脑使用云渲码&#xff1a;【2355】 卓越硬件配置&#xff1a;配备 RTX 3090、48G 显存的 RTX 4090plus&#xff0c;支持 1 - 8 卡机配置&#xff0c;多卡并行计算能力强&am…

DeepSeek开源周Day4:三连发!突破 AI 训练瓶颈的立体解决方案,并行计算三剑客DualPipe、EPLB与Profile-data

项目地址&#xff1a; https://github.com/deepseek-ai/DualPipehttps://github.com/deepseek-ai/eplbhttps://github.com/deepseek-ai/profile-data 开源日历&#xff1a;2025-02-24起 每日9AM(北京时间)更新&#xff0c;持续五天 (4/5)&#xff01; ​ ​ 一、背景概述 …

基于W2605C语音识别合成芯片的智能语音交互闹钟方案-AI对话享受智能生活

随着科技的飞速发展&#xff0c;智能家居产品正逐步渗透到我们的日常生活中&#xff0c;其中智能闹钟作为时间管理的得力助手&#xff0c;也在不断进化。基于W2605C语音识别与语音合成芯片的智能语音交互闹钟&#xff0c;凭借其强大的联网能力、自动校时功能、实时天气获取、以…

Vite与Turbopack现代构建工具架构解析:秒级构建的性能奥秘

引言&#xff1a;传统构建工具的效能瓶颈 Shopify将前端仓库迁移至Vite后&#xff0c;HMR更新时间从Webpack的4.2秒缩短至48毫秒。Turbopack在Vercel生产环境测试中&#xff0c;增量构建速度较Webpack快700%。ChromeOS团队采用Vite后&#xff0c;生产构建从Webpack的17分钟优化…

网络基础知识-2

N个节点完全互联的网型网即N个节点的无向完全图&#xff0c;无向完全图的边数计算如下&#xff1a;每个节点都要指向其他N-1个节点&#xff0c;但是因为无向两个节点之间的边会重复&#xff0c;因此有N(N-1)/2条边HDLC&#xff08;高级数据链路控制协议&#xff09;是一种面向比…

视频级虚拟试衣技术在淘宝的产品化实践

作为一种新的商品表现形态&#xff0c;内容几乎存在于手淘用户动线全流程&#xff0c;例如信息流种草内容、搜索消费决策内容、详情页种草内容等。通过低成本、高时效的AIGC内容生成能力&#xff0c;能够从供给端缓解内容生产成本高的问题&#xff0c;通过源源不断的低成本供给…

蓝桥备赛(三)- 条件判断与循环(下)

一、for循环 1.1 for 循环语法形式 for 循环是三种循环中使用最多的 &#xff0c; for 循环的语法形式如下&#xff1a; 1.2 执行流程 for 循环中 &#xff0c; 表达式1&#xff08;初始化&#xff09;只执行一次 &#xff01; 1.3 实践 练习&#xff1a;使用 for 循环在屏幕…

VMware Fusion 虚拟机Mac版 安装CentOS 7 系统

介绍 CentOS是Community Enterprise Operating System的缩写&#xff0c;也叫做社区企业操作系统。是企业Linux发行版领头羊Red Hat Enterprise Linux的再编译版本&#xff08;是一个再发行版本&#xff09;&#xff0c;而且在RHEL的基础上修正了不少已知的 Bug &#xff0c;相…

如果更换ip地址会怎么样?网络ip地址怎么更换

IP地址&#xff0c;作为网络设备的数字身份证&#xff0c;其稳定性和安全性对于网络通讯至关重要。然而&#xff0c;在某些特定情况下&#xff0c;我们可能需要更换设备的IP地址&#xff0c;以满足安全、隐私或网络管理的需求。那么&#xff0c;如果更换IP地址会怎么样&#xf…

网络通信/IP网络划分/子网掩码的概念和使用

文章目录 概述子网的考题子网掩码的历史有/无类地址子网划分!子网掩码超网技术/CIDR子网掩码和路由IP子网掩码定义 网络规划网络规划-拆子网网络规划-组超网子网划分案例 区分于其他特殊IP地址IP地址和网络地址子网掩码和网络地址子网掩码和广播地址 子网间的通信其他 概述 本…

评估自动驾驶(AD)策略性能的关键指标

以下是针对自动驾驶&#xff08;AD&#xff09;策略性能评测指标的详细解读&#xff0c;结合其物理意义与工程价值&#xff1a; 核心评测指标分类与含义 1. 安全性指标&#xff08;Safety&#xff09; 动态碰撞率&#xff08;Dynamic Collision Ratio, DCR&#xff09; 定义&a…

C++11相较于C++98的新特性介绍:列表初始化,右值引用与移动语义

一&#xff0c;列表初始化 1.1C98中传统的{} C98中一般数组和结构体可以使用{}进行初始化&#xff1a; struct Date {int _year;int _month;int _day; };int main() {int a[] { 1,2,3,4,5 };Date _date { 2025,2,27 };return 0; } 1.2C11中的{} C11以后想统一初始化方式&…

序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?

序列化&#xff08;Serialization&#xff09;是指将对象的状态信息转换为可以存储或传输的形式&#xff08;如字节序列、XML 文档、JSON 字符串等&#xff09;的过程。反序列化则是序列化的逆过程&#xff0c;它将存储或接收到的字节序列、XML 文档、JSON 字符串等转换回对象的…

Python解决“比赛配对”问题

Python解决“比赛配对”问题 问题描述测试样例解决思路代码 问题描述 小R正在组织一个比赛&#xff0c;比赛中有 n 支队伍参赛。比赛遵循以下独特的赛制&#xff1a; 如果当前队伍数为 偶数&#xff0c;那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛&#xff0c;…

uniapp中使用leaferui使用Canvas绘制复杂异形表格的实现方法

需求&#xff1a; 如下图&#xff0c;要实现左图的样式&#xff0c;先实现框架&#xff0c;文字到时候 往里填就行了&#xff0c;原来的解决方案是想用css,html来实现&#xff0c;发现实现起来蛮麻烦的。我也没找到合适的实现方法&#xff0c;最后换使用canvas来实现&#xff…

大模型与呼叫中心融合:未来发展的潜力何在?

大模型与呼叫中心的结合&#xff0c;为企业带来了前所未有的发展机遇。通过提升服务效率、优化营销效果、降低运营成本、增强数据管理与分析能力、提升客户体验以及推动行业创新与变革&#xff0c;大模型呼叫中心正在重塑客户服务与营销的未来。 大模型与呼叫中心的结合具有巨…