C++U7-08-拓扑排序

news/2025/1/21 0:56:41/文章来源:https://www.cnblogs.com/jayxuan/p/18238671

拓扑:是指把实体抽象成与其大小形状无关的点,把连接实体的线路抽象成线,研究这些点线之间的相连关系。而表示点和线之间关系的图就被称为拓扑结构图。

 

拓扑学原本是一个数学概念,描述的是几何图形或空间在连续改变形状后还能保持不变的性质,它只考虑物体间的位置关系而不考虑它们的形状和大小。

此外,在计算机网中,拓扑结构是指用传输介质互连各种设备的物理布局,反映出网络中各实体的结构关系,是建设计算机网络的第一步,是实现各种网络协议的基础,它对网络的性能,系统的可靠性与通信费用都有重大影响。

 

学习拓扑可以先看这个视频:非常好的视频:【拓扑排序在依赖关系解析中的应用【计算机设计大赛参赛作品】】 https://www.bilibili.com/video/BV1iT421y7KT/?share_source=copy_web&vd_source=d28947bf5669866688dc057b3c41b450

 

 

 

 

 

 

 

 

[【拓扑排序】摄像头]

 

 

 

 

【算法分析】
想要破坏所有的摄像头,那么一定是先将没有被监控的摄像头给摧毁,然后这些摄像头被摧毁后可能会出新出现一些没有被监控的摄像头,然后把这些摄像头摧毁。不断重复上面的步骤,直到不能再摧毁摄像头为止。这是一个典型的拓扑排序的问题,采用拓扑排序解决。【参考代码】
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e2 + 9;
bool vis[maxn];
int deg[maxn];
vector<int> ve[maxn];
int main() {int n;cin >> n;for (int i = 0; i < n; i++) {int x, m;cin >> x >> m;while (m--) {int y;cin >> y;ve[x].push_back(y);deg[y]++;}}queue<int> q;for (int i = 1; i <= n; i++) {if (deg[i] == 0) {vis[i] = 1;q.push(i);}}while (q.size()) {int r = q.front();q.pop();for (int i = 0; i < ve[r].size(); i++) {int y = ve[r][i];if (--deg[y] == 0) {q.push(y);vis[y] = 1;}}}int num = 0;for (int i = 1; i <= n; i++) {if (!vis[i]) num++;}if (num) cout << num;else cout << "YES";return 0;
}
View Code

 

 

[【拓扑排序】判环]

 

 

 

 

 

 

 

【算法分析】
这题和模板拓扑排序的区别就是要输出字典序最小的,也就是我们每次要在能选择中选择最小的,因此可以用优先队列来维护能选的顶点,这样每次只需要选堆顶的元素。【参考代码】
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 9;
vector<int> ve[maxn];
int deg[maxn];
int main() {int n, m;cin >> n >> m;for (int i = 1; i <= m; i++) {int u, v;cin >> u >> v;ve[u].push_back(v);deg[v]++;}priority_queue<int, vector<int>, greater<int> >q;for (int i = 1; i <= n; i++) {if (deg[i] == 0) q.push(i);}vector<int> ans;while (q.size()) {int r = q.top();q.pop();ans.push_back(r);for (int i = 0; i < ve[r].size(); i++) {int y = ve[r][i];if (--deg[y] == 0)q.push(y);}}if (ans.size() != n) cout << "has circle";else {for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";}return 0;
}
View Code

 

 

总结:

 

作业讲解分析:

链接:https://pan.baidu.com/s/1DvI0229M5v2QQnPzIEnTeg?pwd=0000
提取码:0000

 

 

 

 

 

 

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

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

相关文章

管式土壤墒情监测仪:引领农业与环境研究的革命性工具

在农业科技日新月异的今天,管式土壤墒情监测仪凭借其独特的优势,已逐步成为农业和环境领域不可或缺的研究装备。这款监测仪,基于先进的介电常数原理,以其卓越的精确度和强大的功能,为研究人员提供了详尽而深入的土壤墒情数据,为探索土壤状况揭开了新篇章。管式土壤墒情监…

本地部署GLM-4-9B清华智谱开源大模型方法和对话效果体验

清华大学和智谱AI推出了全面升级的新一代基座大模型GLM-4,整体性能相比GLM3提升60%,支持128K上下文,可根据用户意图自主理解和规划复杂指令、完成复杂任务……GLM-4-9B是清华大学和智谱AI推出的最新一代预训练模型GLM-4系列中的开源版本。在语义、数学、推理、代码和知识等多…

minos 2.5 中断虚拟化——vGIC

首发公号:Rand_cs这一节开始讲述真正的中断虚拟化,首先来看硬件方面的虚拟化。前文 minos 2.3 中断虚拟化——GICv2 管理 主要讲述 GICv2 的 Distributor 和 CPU Interface,在 Hypervisor 存在的情况下,它们都是为 Hypervisor 服务的。现在有了 vm,vm 里面的内核也需要操作…

minos 2.6 中断虚拟化——虚拟中断子系统

首发公号:Rand_csHypervisor 需要对每个虚机的虚拟中断进行管理,这其中涉及的一系列数据结构和操作就是虚拟中断子系统 VIRQ 虚拟中断描述符 struct vcpu {uint32_t vcpu_id; .........../** member to record the irq list which the* vcpu is handling now*/struct virq_st…

minos 1.2 内存虚拟化——guest

首发公号:Rand_csminos 1.2 内存虚拟化——guest项目来自乐敏大佬:https://github.com/minosproject/minos本文继续讲述 minos 中的内存虚拟化中关于 guest 的部分,主要弄清楚一个问题,minos 如何管理 guest vm 的内存。 对于虚拟机的内存管理主要是 ipa 的管理,ipa 如何映…

minos 2.1 中断虚拟化——ARMv8 异常处理

首发公号:Rand_cs越往后,交叉的越多,大多都绕不开 ARMv8 的异常处理,所以必须得先了解了解 ARMv8 的异常处理流程 先说一下术语,从手册中的用词来看,在 x86 平台,一般将异常和中断统称为中断,在 ARM 平台,一般将中断和异常统称为异常 异常的流程,可以分为 3 个阶段,…

NSSCTF———MISC

[NISACTF 2022]huaji? [SWPU 2020]套娃 [LitCTF 2023]What_1s_BASE (初级) [SWPUCTF 2021 新生赛]gif好像有点大 [NISACTF 2022]为什么我什么都看不见 [LitCTF 2023]404notfound (初级) [LitCTF 2023]这羽毛球怎么只有一半啊(恼 (初级) [LitCTF 2023]喜欢我的压缩包么 (初级)…

BLP 模型

公号:Rand_csBLP 模型 本篇文章是调研了许多资料后对 BLP 模型的一个总结 MLS,Multi-level Security,主要关心的是数据机密性 D. Elliott Bell 和 Leonard J. LaPadula 在 1996 年提出了基本的 BLP 模型,主要有两个性质:The Simple Security Property states that a subje…

小端序题目——[LitCTF 2023]debase64

还挺有价值的,记录一下 题目DIEPE文件在Windows操作系统下默认使用小端序 IDA main函数绿框:输入长度要20 红框:base64加密 黄框:加密后的结果要与关键数据相等获取数据,我一般喜欢调试看栈,这样就少一次翻转了 取出15个数据:0x46, 0xED, 0x18, 0x96, 0x56, 0x9E, 0xD2,…

【闲话】高考集训之训什么

写的有些杂,凑活看吧好像高考语文作文被学校和《意林》押中题了,主题是“人工智能”,大势所趋。 贴一张奥奇海报(找不到具体来源了)来高考助力吧。本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/18238551,未经允许严禁转载…

C++文件/流

C++文件读写(文本文件/二进制文件) 一、前言 常见的文件类型可分为两种:文本文件和二进制文件。 文本文件的阅读相对容易,可以使用记事本/Notepad++/VS Code等应用程序直接打开阅览;然而二进制文件由0/1序列组成,直接打卡二进制文件通常是乱码状态。如果需要读取二进制文…

SpringAMQP使用管理RabbitMQ的五种消息模型

使用SpringAMQ实现五种消息队列模型1.普通队列 2.工作队列(WorkQueue) 发布订阅=>根据交换机的不同分为三种 3.订阅模型之Fanout(广播) 4.订阅模型之Direct(路由) 5.订阅模型之Topic(话题) 使用前导: 1.在生产者和消费者项目上分别导入RabbitMQ依赖<!--AMQP依赖,包含Rab…