搜索与图论第五期 拓扑序列

前言

拓扑排序是非常重要的一部分,希望大家都能够手撕代码!!!(嘿嘿嘿)


一、拓扑排序定义(百度须知嘿嘿嘿)

拓扑排序
拓扑排序是一种对有向无环图(Directed Acyclic Graph,简称DAG)进行的排序过程,目的是将图中所有的顶点按照发生事件的顺序排成一条线性序列。这种排序确保了图中任意两个相邻顶点之间至少有一条边相连,且在这条边的方向上,这条边的终点在前于起点。拓扑排序的一个关键特性是,它只包含在一个顶点在其事件序列中出现的次数,这意味着每个顶点只会出现一次。

要执行拓扑排序,可以从DAG图的任一顶点开始,选择出度为0的顶点作为“根”,并将它们放入队列。然后,从队列中取出顶点,将其事件序列中的下一个顶点加入队列,同时移除与该顶点相关的所有边。这个过程会一直持续直到队列为空或者到达了一个没有前驱顶点的状态,此时就得到了该DAG的拓扑排序。

在实际应用中,拓扑排序可以用于确定哪些活动可以在给定的顺序下并发执行,因为只有那些在特定顺序下没有依赖关系的活动才能一起运行。例如,在AOV网中,如果没有回路,所有活动都可以按照拓扑序列排列,从而形成一个线性序列,使得每个活动的所有前驱活动都在其前面。1

总结来说,拓扑排序是一种用于确定有向无环图中顶点顺序的方法,确保每个顶点只出现一次,并且遵循特定的事件发生顺序。这种方法对于分析并发执行的活动顺序非常有用。

二、例题

1.有向图的拓扑排序

2.AC代码:

//图的拓扑序列只针对有向图
//有向无环图被称为拓扑图
//一个点的入度是指有多少条边是指向自己
//一个点有几条边出去就是这个点的出度
//一个有向无环图一定至少存在一个入度为0的点
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010;
int n, m;
int h[N], e[N], ne[N], idx;
int q[N], d[N];
//q是宽搜队列,d是这个点的入度void add(int a, int b) {//邻接表e[idx] = b;ne[idx] = h[a];h[a] = idx++;
}bool topsort() {int hh = 0, tt = -1;for (int i = 1; i <= n; i++)if (!d[i]) //如果这个点存在入度q[++tt] = i;//就把这个点加到队列里while (hh <= tt) {int t = q[hh++];//取出队头元素for (int i = h[t]; i != -1; i = ne[i]) {//拓展队头元素int j = e[i];//找到出边d[j]--;//删掉入边if (d[j] == 0) //如果这个点的入度全部被删掉了q[++tt] = j;//就让这个点入队}}//判断所有点是否已经全部入队return tt == n - 1; //返回队列里元素的数量是否等于n-1
}int main() {cin >> n >> m;memset(h, -1, sizeof h);for (int i = 0; i < m; i++) {int a, b;cin >> a >> b;add(a, b); //插入一条a->b的有向边d[b]++;//b的入度加一}if (topsort()) {//如果存在拓扑序for (int i = 0; i < n; i++)printf("%d ", q[i]);puts("");} else {puts("-1");}return 0;
}

总结

拓扑排序可能会经常用到,希望大家能够完全掌握!!!

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

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

相关文章

flink学习之窗口处理函数

窗口处理函数 什么是窗口处理函数 Flink 本身提供了多层 API&#xff0c;DataStream API 只是中间的一环&#xff0c;在更底层&#xff0c;我们可以不定义任何具体的算子&#xff08;比如 map()&#xff0c;filter()&#xff0c;或者 window()&#xff09;&#xff0c;而只是…

GitHub Copilot 与 ChatGPT:哪种工具更适合软件开发?

GitHub Copilot 与 ChatGPT&#xff1a;哪种工具更适合软件开发&#xff1f; 比较 ChatGPT 与 GitHub Copilot编程语言功能性定制化训练数据上下文准确性 ChatGPT 与 GitHub Copilot&#xff1a;哪个更适合软件开发&#xff1f;常见问题解答&#xff1a; 不断发展的编程世界正在…

深入理解stress/stress-ng

文章目录 一、概述二、安装2.1、源码编译安装2.2、命令行安装2.3、安装确认 三、重要参数详解3.1、查询支持的参数3.2、重要参数说明 四、实例4.1、压测CPU4.2、压测内存4.3、压测IO4.4、压测磁盘及IO4.5、压测磁盘及CPU 团队博客: 汽车电子社区 一、概述 stress是一种工作负载…

电子行业含砷废水,深度除砷技术

砷是一种类金属元素&#xff0c;砷化物生物毒性极强&#xff0c;是国际公认的第一类致癌物。因此&#xff0c;这些含砷废水必须经过一定的处理才能排放到环境中。那么&#xff0c;哪些行业会产生含砷废水呢?在地球上&#xff0c;砷是一种常见的元素。在自然界中&#xff0c;砷…

2023年CSDN年底总结-独立开源创作者第一年

2023年最大的变化&#xff0c;就是出来创业&#xff0c;当独立开源创作者&#xff0c;这一年发起SolidUI开源项目&#xff0c;把知乎重新开始运营起来。CSDN粉丝破万&#xff0c;CSDN博客专家和AI领域创作者。 2023年年度关键词&#xff1a;创业 https://github.com/CloudOrc…

SpringBoot责任链与自定义注解:优雅解耦复杂业务

引言 责任链模式是一种行为设计模式&#xff0c;它允许你将请求沿着处理者链进行传递&#xff0c;直到有一个处理者处理请求。在实际应用中&#xff0c;责任链模式常用于解耦发送者和接收者&#xff0c;使得请求可以按照一定的规则被多个处理者依次处理。 首先&#xff0c;本…

Ceph篇之利用Prometheus监控ceph服务

一、Ceph内置模块 Ceph manager 内部的模块中包含了 prometheus 的监控模块,并监听在每个 manager 节点的 9283 端口&#xff0c;该端口用于将采集到的信息通过 http 接口向 prometheus 提供数据。 二、监控搭建 1、启用 prometheus 监控模块 ceph mgr module enable promethe…

Java+Spring Cloud +Vue+UniApp微服务智慧工地云平台源码

目录 智慧工地云平台功能 【劳务工种】所属工种有哪些&#xff1f; 1.管理人员 2.信息采集 3.证件管理 4.考勤管理 5.考勤明细 6.工资管理 7.现场统计 8.WIFI教育 9.课程库管理 10.工种管理 11.分包商管理 12.班组管理 13.项目管理 智慧工地管理平台是以物联网、…

Windows物理主机迁移至VMware ESXI服务器

文章目录 物理主机迁移至VMware ESXI服务器一、迁移环境二、迁移步骤&#xff11;、主机A准备工作&#xff11;、关闭主机A的防火墙&#xff12;、主机A需要设置管理员密码&#xff13;、主机A需要设置允许共享访问 &#xff12;、主机B操作步骤1、安装**VMware vCenter Conver…

鸿蒙开发第2篇__装饰器

在ArkTS中&#xff0c; 有装饰器语法。 装饰器用于装饰类、结构、方法、变量&#xff0c;赋予其特殊的含义。 1. Component 表示自定义组件&#xff0c; 用此装饰器的组件是可重用的&#xff0c;可以与其他组件重合 此装饰器装饰的 struct 表示该结构体具有组件化能力&#…

Java复习系列之阶段二:数据库(2)

1. 基础语法 1.1 DQL&#xff08;数据查询语句&#xff09; 执行顺序&#xff1a; from、join 、on、where、group by、having、select、distinct、order by、limit 1.2 DML&#xff08;数据修改语言&#xff09; 对数据表的增删改 insert into update set delete form 1.…

新年短信群发选择自己发还是106短信平台合适?

选择自己发新年短信群发还是106短信平台&#xff0c;取决于您的需求和资源。 如果您需要发送的短信数量较少&#xff0c;或者您有特定的发送需求&#xff0c;例如需要发送一些包含敏感信息的短信&#xff0c;那么您可以选择自己发送。您可以使用手机或电脑上的短信应用程序来发…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 1月26日,星期五

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年1月26日 星期五 农历腊月十六 1、 教育部&#xff1a;保障符合就业条件的公费师范生有编有岗&#xff0c;全部落实任教学校。 2、 禁用有毒有害材料&#xff01;我国首部快递包装强制性国家标准6月1日实施。 3、 中疾控&…

BabylonJS 6.0文档 Deep Dive 摄像机(六):遮罩层和多相机纹理

1. 使用遮罩层来处理多个摄影机和多网格物体 LayerMask是分配给每个网格&#xff08;Mesh&#xff09;和摄像机&#xff08;Camera&#xff09;的一个数。它用于位&#xff08;bit&#xff09;级别用来指示灯光和摄影机是否应照射或显示网格物体。默认值为0x0FFFFFFF&#xff…

JOSEF约瑟 过电流继电器 JL15-1200/11 一开一闭 吊车起重机交直流可用

系列型号 JL15-/11: JL15-1.5/11电流继电器JL15-2.5/11电流继电器 JL15-5/11电流继电器JL15-10/11电流继电器 JL15-15/11电流继电器JL15-20/11电流继电器 JL15-30/11电流继电器JL15-40/11电流继电器 JL15-60/11电流继电器JL15-80/11电流继电器 JL15-100/11电流继电器JL1…

code server安装使用教程

1. 安装 1.1. 下载code-server安装包 类似这种文件&#xff1a;code-server-3.10.2-linux-amd64.tar.gz 解压&#xff1a;tar -xvf code-server-3.10.2-linux-amd64.tar.gz 1.2 &#xff08;可选&#xff09;建立软连接 ln -s path/to/code-server-3.10.2-linux-amd64/bin…

音频前置放大器电路图大全

音频前置放大器电路图&#xff08;一&#xff09; 在本设计中&#xff0c;前置放大器的增益控制采用直流音量控制方式&#xff0c;其具体实现如图1所示。前置放大器是由全差分运放和电阻构成的反相比例放大器&#xff0c;其增益由反馈电阻与输人电阻的比值决定。外部输人的直流…

铅酸电池废液处理需要哪些工艺设备

铅酸电池废液处理是一项非常重要的环保任务。为了保护环境和人类的健康&#xff0c;我们需要采取一系列工艺设备来处理这些废液。那么&#xff0c;到底需要哪些设备呢&#xff1f;让我们深入探讨一下吧。 首先&#xff0c;废液处理的第一步是预处理阶段。在这个阶段&#xff0c…

华为数通方向HCIP-DataCom H12-831题库(判断题:101-120)

第101题 路由协议通过Hello报文就可以检测到故障,所以不需要BFD 正确 错误 答案: 错误 解析: Hello机制是可以检测到网络故障,但是效率太低,平常会结合BFD来快速检测故障机制,能够实现快速故障检测。 第102题 VXLAN采用Mac in TCP封装方式将二层报文用三层协议进行封装 …

【CANoe使用大全】——Trace窗口

文章目录 1.Trace作用2.Trace窗口打开方式2.1.Analysis—>Trace2.2.Measurement Setup ------> Trace 3.Trace窗口菜单栏介绍3.1. Detail View3.1. Statistic View3.3.Difference view3.4.Predefined filter3.5.Analysis filter3.6.其他过滤方式 4. 其他窗口介绍5. 报文保…