数据结构与算法:图论——拓扑排序

article/2025/7/4 15:26:00

基础与模板:

image-20250526215305308

有两个KahnDFS两个算法

下面给出Kahn的算法模板

image-20250526232619234

#include<iostream>
#include<vector>
#include<queue>
using namespace std;vector<int> topologicalSortKahn(int num, const vector<pair<int, int>>& relations){vector<int> result;vector<int> inDegree(num+1,0);	// 记录所有节点的入度vector<vector<int>> adj(num+1);	// 用于记录节点的连接的节点for(const auto &rel:relations){int from = rel.first;int to	 = rel.second;adj[from].push_back(to);	// 写入每个节点连接的节点inDegree[to]++;				// 写入入度}queue<int> q;					// 用于记录入度为0的节点// 遍历节点,把入度为0的点写入q// 这里需要注意节点到底是从0开始还是从1开始for(int i = 0;i< num;++i){if(inDegree[i] == 0){q.push(i);}}// 提取入度为0的节点,删除其连接,不断更新入度while(!q.empty()){int current= q.front();q.pop();result.push_back(current);		for(int next : adj[current]){inDegree[next]--;		// 每个下一节点的入度减1if(inDegree[next]==0){	// 入度减1后判断为0加入qq.push(next);}}}if(result.size() != num) return{-1}; // 判断是环,返回-1return result;
}int main(){int N,M;cin>>N>>M; vector<pair<int,int>>  inRelation;int from,to;while(M--){cin>>from>>to;inRelation.emplace_back(pair<int,int>{from,to});}vector<int> res = topologicalSortKahn(N,inRelation);for(size_t i = 0;i < res.size()-1;i++){cout<<res[i]<<" ";}cout<<res.back();
}

图的拓扑排序题目leetcode

题号标题题解标签难度
0207课程表Python深度优先搜索、广度优先搜索、图、拓扑排序中等
0210课程表 IIPython深度优先搜索、广度优先搜索、图、拓扑排序中等
1136并行课程Python图、拓扑排序中等
2050并行课程 IIIPython图、拓扑排序、数组、动态规划困难
0802找到最终的安全状态Python深度优先搜索、广度优先搜索、图、拓扑排序中等
0851喧闹和富有Python深度优先搜索、图、拓扑排序、数组中等

题目1、117. 软件构建

卡吗网代码编辑真不错

image-20250526232851715

直接套模板

image-20250526233030925

题目2、210. 课程表 II

image-20250526233213153

class Solution {
public:vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {vector<int> result;vector<int> inDegree(numCourses+1,0);	// 记录所有节点的入度vector<vector<int>> adj(numCourses+1);	// 用于记录节点的连接的节点for(const auto &rel:prerequisites){int from = rel[0];int to	 = rel[1];adj[from].push_back(to);	// 写入每个节点连接的节点inDegree[to]++;				// 写入入度}queue<int> q;					// 用于记录入度为0的节点// 遍历节点,把入度为0的点写入q// 这里需要注意节点到底是从0开始还是从1开始for(int i = 0;i< numCourses;++i){if(inDegree[i] == 0){q.push(i);}}// 提取入度为0的节点,删除其连接,不断更新入度while(!q.empty()){int current= q.front();q.pop();result.push_back(current);		for(int next : adj[current]){inDegree[next]--;		// 每个下一节点的入度减1if(inDegree[next]==0){	// 入度减1后判断为0加入qq.push(next);}}}if(result.size() != static_cast<size_t>(numCourses)) return{}; // 判断是环,返回{}return result;}
};

image-20250526234525735

题目3、任务调度算法

image-20250518151906514
image-20250518151919137

image-20250527102602838
#include <vector>
#include <utility>
#include <queue>
#include <algorithm>using namespace std;class Solution {
public:int GetMinT	ime(int taskNum, const vector<pair<int, int>>& relations){vector<vector<int>> adj(taskNum+1);vector<int> inDegree(taskNum + 1, 0);vector<int> dp(taskNum + 1, 1);for (const auto& rel : relations) {int from = rel.second; int to = rel.first;    adj[from].push_back(to);inDegree[to]++;}queue<int> q;for (int i = 1; i <= taskNum; ++i) {if (inDegree[i] == 0) {q.push(i);}}while (!q.empty()) {int current = q.front();q.pop();for (int next : adj[current]) {dp[next] = max(dp[next], dp[current] + 1);if (--inDegree[next] == 0) {q.push(next);}}}return *max_element(dp.begin() + 1, dp.end());}
};

题目4、207. 课程表 - 力扣

image-20250527103226670

这里就是判断是否有环

image-20250527104159624


http://www.hkcw.cn/article/bCcVRaFQDv.shtml

相关文章

现代语言模型中的分词算法全解:从基础到高级

基础分词&#xff08;Naive Tokenization&#xff09; 最简单的分词方式是基于空格将文本拆分为单词。这是许多自然语言处理&#xff08;NLP&#xff09;任务中常用的一种分词方法。 text "Hello, world! This is a test." tokens text.split() print(f"Tok…

Deepseek给出的8255显示例程

#include <stdio.h> #include <conio.h> #include <dos.h>// 定义8255端口地址 (根据原理图译码确定) #define PORT_8255_A 0x8000 // PA端口地址 #define PORT_8255_B 0x8001 // PB端口地址 #define PORT_8255_C 0x8002 // PC端口地址 #define PORT_8255…

计算机组成原理——CPU的功能和基本结构

5.1 CPU的功能和基本结构 整理自beokayy课程视频 1.CPU的组成 程序计数器&#xff08;PC&#xff09;&#xff1a; 存放即将执行指令的地址。顺序执行时&#xff0c;PC“1”形成下条指令地址。在有的机器中&#xff0c;PC本身具有“1”计数功能&#xff0c;也有的机器借助运算…

LINUX62软链接;核心目录;错题:rpm -qa |grep<包名> 、rpm -ql<包名>;rm -r rm -rf;合并 cat

硬链接 软链接 软链接 [rootcode axel-2.4]# which axel /usr/bin/which: no axel in (/sbin:/bin:/usr/sbin:/usr/bin) [rootcode axel-2.4]# ln -s /opt/axel/bin/axel /usr/bin [rootcode axel-2.4]# axel https://mirrors.aliyun.com/centos-stream/ 初始化下载: https:/…

[Java恶补day13] 53. 最大子数组和

休息了一天&#xff0c;开始补上&#xff01; 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums …

C++哈希表:冲突解决与高效查找

引入 通过CSTL库中的unordered_map和unordered_set的学习&#xff0c;我们还需要其底层结构是什么&#xff0c;如何实现的&#xff0c;本节重点讲解哈希 哈希概念 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应关系&#xff0c;因此在查找一个元素是…

【科研绘图系列】R语言绘制论文比较图(comparison plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图1画图2画图3系统信息介绍 这篇文章详细介绍了如何使用R语言进行工作流中不同步骤的比较分析,包括数据预处理、特征选择、模型训练和结果可…

录屏不再难,从功能到体验深度测评

在日常工作和学习中&#xff0c;录屏是一项非常常见的需求&#xff0c;比如制作教程、记录操作过程、录制线上会议等。市面上虽然有不少录屏工具&#xff0c;但要么功能受限&#xff0c;要么广告繁多&#xff0c;甚至需要付费解锁高级功能&#xff0c;使用起来并不方便。 这款…

2023年12月6级第一套第一篇

在这里才找完题干&#xff0c;所以答案在下一句虽然不重要&#xff0c;不用看&#xff0c;重要的是但是 A&#xff1a;critic在虽然部分&#xff0c;不重要&#xff0c; c选项前面的部分也在虽然部分&#xff0c;不重要定位的下一句就是答案&#xff0c;还有冒号&#xff0c;看…

Linux --TCP协议实现简单的网络通信(中英翻译)

一、什么是TCP协议 1.1 、TCP是传输层的协议&#xff0c;TCP需要连接&#xff0c;TCP是一种可靠性传输协议&#xff0c;TCP是面向字节流的传输协议&#xff1b; 二、TCPserver端的搭建 2.1、我们最终好实现的效果是 客户端在任何时候都能连接到服务端&#xff0c;然后向服务…

多群组部署

相关概念 星形拓扑和并行多组 如下图&#xff0c;星形组网拓扑和并行多组组网拓扑是区块链应用中使用较广泛的两种组网方式。 星形拓扑&#xff1a;中心机构节点同时属于多个群组&#xff0c;运行多家机构应用&#xff0c;其他每家机构属于不同群组&#xff0c;运行各自应用…

unidbg patch 初探 微博deviceId 案例

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 看了b站迷人瑞信那个由于是…

如何自定义WordPress主题(5个分步教程)

如果您已经安装了一个 WordPress 主题&#xff0c;但它不太适合您&#xff0c;您可能会感到沮丧。在定制 WordPress 主题方面&#xff0c;您有很多选择。 挑战在于找到正确的方法。 在本篇文章中&#xff0c;我将引导您了解自定义 WordPress 主题的各种选项&#xff0c;帮助您…

【兽医处方专用软件】佳易王兽医电子处方软件:高效智能的宠物诊疗管理方案

一、软件概述与核心优势 &#xff08;一&#xff09;试用版获取方式 资源下载路径&#xff1a;进入博主头像主页第一篇文章末尾&#xff0c;点击卡片按钮&#xff1b;或访问左上角博客主页&#xff0c;通过右侧按钮获取详细资料。 说明&#xff1a;下载文件为压缩包&#xff…

【nssctf第三题】[NSSCTF 2022 Spring Recruit]easy C

这是题目&#xff0c;下载附件打开是个C文件 #include <stdio.h> #include <string.h>int main(){char a[]"wwwwwww";char b[]"dvxbQd";//try to find out the flagprintf("please input flag:");scanf(" %s",&a);if…

DAY41 CNN

可以看到即使在深度神经网络情况下&#xff0c;准确率仍旧较差&#xff0c;这是因为特征没有被有效提取----真正重要的是特征的提取和加工过程。MLP把所有的像素全部展平了&#xff08;这是全局的信息&#xff09;&#xff0c;无法布置到局部的信息&#xff0c;所以引入了卷积神…

助力活力生活的饮食营养指南

日常生活中&#xff0c;想要维持良好的身体状态&#xff0c;合理的营养补充至关重要。对于易受身体变化困扰的人群来说&#xff0c;更需要从饮食中摄取充足养分。​ 蛋白质是身体的重要 “建筑材料”&#xff0c;鱼肉、鸡肉、豆类制品富含优质蛋白&#xff0c;易于消化吸收&am…

CA-Net复现

复现结果–Dice&#xff1a;90.093802&#xff0c;Jaccard&#xff1a;82.077802&#xff0c;95HD&#xff1a;6.89387267&#xff0c;ASD&#xff1a;1.76263258&#xff0c;与原文一致 感想 第16篇完全复现的论文

【具身智能】【机械臂】各类机械臂对比

选购指标 选购指标 说明机械-负载1w以内通常200g负载&#xff08;一袋酸奶&#xff09;&#xff0c;1w-5w 1kg负载&#xff08;1L饮料&#xff09;&#xff0c;5w 3kg负载机械-精度越贵精度越高机械-夹爪是否支持更换夹爪等&#xff0c;能否支持力控夹爪机械-AGV扩展 …

云服务器无法远程连接怎么办?

当云服务器无法远程连接&#xff08;比如 SSH、RDP 连接不上&#xff09;时&#xff0c;可以按照以下步骤逐一排查和解决&#xff1a; ✅ 一、检查网络连通性 &#x1f539; 1. 确认公网 IP 是否正确 登录云服务商后台查看分配给服务器的公网 IP&#xff0c;确保你连接的目标地…