【Day48 LeetCode】图论问题 Ⅵ

server/2025/3/1 5:03:41/

一、图论问题 Ⅵ

1、拓扑排序–软件构建

拓扑排序是将一个有向图转成线性的排序,需要判断有向图中是否存在环。这个比较经典的问题就是leetcode里207 课程表。和这题异曲同工。
思路就是:记录每个节点的入度,以及当前节点的下一个节点。优先选出入度为0的节点,因为入度为0表示不需要前置依赖(或者前置依赖已满足)。入度为0的节点进入队列,再出队列,消除对下一个节点的影响,也就是将下一个节点的入度减1,若产生新的入度为0的节点,则加入队列。

# include<iostream>
# include<vector>
# include<queue>using namespace std;int main(){int n, m; // n个文件  m条依赖关系cin >> n >> m;vector<int> indegree(n);vector<vector<int>> neighbor(n);int s, t;for(int i=0; i<m; ++i){cin >> s >> t;indegree[t]++;neighbor[s].push_back(t);}// 入度为0的进队列queue<int> q;for(int i=0; i<n; ++i){if(indegree[i]==0)q.push(i);}vector<int> ans;while(!q.empty()){int pre = q.front(); q.pop();ans.push_back(pre);for(auto cur : neighbor[pre]){indegree[cur]--;if(indegree[cur]==0)q.push(cur);}}if(ans.size()==n){for(int i=0; i<n-1; ++i)cout << ans[i] << " ";cout << ans[n-1] << endl;}else{cout << -1 << endl;}return 0;
}

2、dijkstra算法

dijkstra算法是经典的最短路算法,其算法主要流程是 1、选取源点到未被访问过且距离最近的节点; 2、将最近节点标记为访问过 3、更新非访问节点到源点的距离。可以发现,dijkstra算法与prim算法算法流程上非常像。
在代码实现上,我们需要使用一个数组来记录每一个节点距离源点的最近距离。

# include<iostream>
# include<vector>
# include<climits>using namespace std;int main(){int n, m;cin >> n >> m;int s, e, v;vector<vector<int>> grid(n+1, vector<int>(n+1, INT_MAX));for(int i=0; i<m; ++i){cin >> s >> e >> v;grid[s][e] = v;}vector<int> minDist(n+1, INT_MAX);vector<bool> visited(n+1, false);int start = 1, end = n;minDist[start] = 0;for(int i=1; i<=n; ++i){int cur = 1, minVal = INT_MAX;// 1、选取源点到未被访问过且距离最近的节点; for(int v=1; v<=n; ++v){if(!visited[v] && minDist[v] < minVal){minVal = minDist[v];cur = v;}}// 2、将最近节点标记为访问过 visited[cur] = true;// 3、更新非访问节点到源点的距离for(int v=1; v<=n; ++v){if(!visited[v] && grid[cur][v] < INT_MAX && grid[cur][v] + minDist[cur] < minDist[v])minDist[v] = grid[cur][v] + minDist[cur];}}if(minDist[end] < INT_MAX)cout << minDist[end] << endl;elsecout << -1 << endl;return 0;
}

http://www.ppmy.cn/server/171469.html

相关文章

java23种设计模式-策略模式

策略模式(Strategy Pattern)学习笔记 编程相关书籍分享:https://blog.csdn.net/weixin_47763579/article/details/145855793 DeepSeek使用技巧pdf资料分享:https://blog.csdn.net/weixin_47763579/article/details/145884039 🌟 模式定义 策略模式是一种行为型设计模式,…

echarts 环形图 指定区域从右侧中心点展开

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>ECharts 环形图不合理区域展示<…

IP-----动态路由OSPF

这只是IP的其中一块内容&#xff0c;IP还有更多内容可以查看IP专栏&#xff0c;前一章内容为GRE和MGRE &#xff0c;可通过以下路径查看IP-------GRE和MGRE-CSDN博客,欢迎指正 注意&#xff01;&#xff01;&#xff01;本部分内容较多所以分成了两部分在下一章 5.动态路由OS…

如何免费使用稳定的deepseek

0、背景&#xff1a; 在AI辅助工作中&#xff0c;除了使用cursor做编程外&#xff0c;使用deepseek R1进行问题分析、数据分析、代码分析效果非常好。现在我经常会去拿行业信息、遇到的问题等去咨询R1&#xff0c;也给了自己不少启示。但是由于官网稳定性很差&#xff0c;很多…

Cuppa CMS v1.0 任意文件读取(CVE-2022-25401)

漏洞简介&#xff1a; Cuppa CMS v1.0 administrator/templates/default/html/windows/right.php文件存在任意文件读取漏洞 漏洞环境&#xff1a; 春秋云镜中的漏洞靶标&#xff0c;CVE编号为CVE-2022-25401 漏洞复现 弱口令行不通 直接访问administrator/templates/defau…

如何实现某短视频平台批量作品ID的作品详情采集

声明: 本文仅供学习交流使用,请勿用于非法用途。 在短视频平台的数据分析和内容监测中,批量采集作品详情是一个常见的需求。本文将介绍如何使用 Python 编写一个高效的爬虫程序,根据批量作品 ID 实现作品详情的批量采集。 1. 需求分析 输入:一批作品 ID。输出:每个作品 …

大模型架构与训练方向

一、核心知识领域 ‌模型架构设计‌ 掌握Transformer、MoE&#xff08;Mixture-of-Experts&#xff09;、RetNet等主流架构的原理与实现细节&#xff0c;需深入理解注意力机制、位置编码、稀疏激活等技术‌13。学习多模态融合架构&#xff08;如CLIP、Flamingo&#xff09;&…

STM32 物联网智能家居 (七) 设备子系统--风扇控制

STM32 物联网智能家居 (七) 设备子系统–风扇控制 一、概述 下面我们来讲解设备子系统中的风扇控制,这是我们设备子系统中的最后一章,相信前面大家一家掌握了这种架构分层的编程思想,后续会很容易将程序进行扩展和开发。 上一节我们介绍了OLED屏幕的编程思想,有很多小伙…