拓扑排序算法总结

知识概览

  • 求图的拓扑序是图的宽搜的一个很经典的应用,拓扑序列是针对有向图来说的。

拓扑序列的定义是:

如果说一个点的序列满足对于图中的每条有向边(x, y),x都出现在y的前面,那就称这个序列是这个图的拓扑序列。 

备注:拓扑序列是指所有的边都是从前指向后的。只要有一个环,就一定没有拓扑序列。可以证明,有向无环图一定存在一个拓扑序列,所以有向无环图也被称为拓扑图。

必备知识:

  • 有向图的每个点有两个度,一个是入度,一个是出度。
  • 入度:一个点有几条边进来。
  • 出度:一个点有几条边出去。 

例题展示

题目链接

活动 - AcWing系统讲解常用算法与数据结构,给出相应代码模板,并会布置、讲解相应的基础算法题目。icon-default.png?t=N7T8https://www.acwing.com/problem/content/850/

代码

#include <cstring>
#include <iostream>
#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];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]) q[++tt] = j;}}return tt == n - 1;
}int main()
{cin >> n >> m;memset(h, -1, sizeof h);while (m--){int a, b;cin >> a >> b;add(a, b);d[b]++;}if (topsort()){for (int i = 0; i < n; i++) printf("%d ", q[i]);puts("");}else puts("-1");return 0;
}

参考资料

  1. AcWing算法基础课

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

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

相关文章

Ns3使用MPI加速仿真速度

Ns3中在大规模拓扑仿真中&#xff0c;为加速仿真速度&#xff0c;可以利用MPI工具&#xff0c;实现多进程联合仿真。 linux系统下安装openmpi. 参考链接# ubuntu下安装openMPI成功运行ns-3中的文件 命令1:sudo gedit /etc/profile打开文件&#xff0c;加入ns-3的路径: 最后此文…

代码中 #ifdef注释方法的使用

1 代码中 #ifdef注释方法的使用 #ifdef的使用 #ifdef _XXXX ...程序段1... #else ...程序段2... #endif如果标识符_XXXX已经被#define定义&#xff0c;则编译程序段&#xff11;&#xff0c;否则编译程序段&#xff12;&#xff0e;#else非必须&#xff0c;可不存在程序段&am…

input发送a.jax_JAX-RS 2.0的新功能– @BeanParam批注

input发送a.jax至少可以说JAX-RS很棒&#xff0c;也是我的最爱之一&#xff01; 为什么&#xff1f; 功能丰富 直观&#xff08;因此学习曲线不那么陡峭&#xff09; 易于使用和开发 具有出色的RI – Jersey &#xff0c; RestEasy等 有足够的JAX-RS粉丝可以添加此内容&am…

常用的\与/的区别

1 常用的\与/的区别 1.1 正斜杠/ 正斜杠"/"一般作为除法符号或者间隔符号使用&#xff0c;主要用于间隔使用。 在unix系统中&#xff0c;/ 表示目录。由于web遵循unix命名&#xff0c;所以在网址&#xff08;URL&#xff09;中&#xff0c;/ 表示目录 1.2 反斜杠 …

Netty Java快速指南

使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 今天尝试Okta。 Netty是一个无阻塞的输入/输出&#xff08;NIO&#xff09;框架&#xff0c;它使开发低级网络服务器和客户端变得相对…

编辑器中代码中多行注释

1 Sublime 快捷键为ctl shift / ,并在第二行打一个*后&#xff0c;以后的换行会自动在开始打印一个* 2 VScode 快捷键为Alt Shift A,并在第二行与第三行分别开始打一个*后&#xff0c;以后的换行会自动在开始打印一个* 3 两者最通用的方式 使用快捷键后&#xff0c;在…

到无限(溪流)和超越!

Java允许您处理集合或流中的数据。 将流视为将一个集合转换为另一个集合的技术非常容易。 这可能会导致一些相当随意的代码&#xff0c;在该代码中&#xff0c;流数据被重复收集到某种类型的集合中&#xff0c;作为整体集合传递&#xff0c;然后再进行更多处理。 对于6个元素&…

PicGo {“message“:“A file with this name already exists“}解决方案

这里主要是重复上传了同类型的文件导致的冲突 1、打开PicGo 2、点击并打开PicGo设置 3、将“时间戳重命名”打开 4、从新上传测试一遍就可以了 结语 用时间戳给图片命名是避免文件重复的好方式&#xff0c;推荐设置

hadoop的开发工具_Hadoop开发工具简介

hadoop的开发工具几天前&#xff0c; Apache Hadoop开发工具 &#xff08;又名HDT &#xff09;发布了。 这些项目旨在将插件引入eclipse中&#xff0c;以简化Hadoop平台上的开发。 该博客旨在概述HDT的一些重要功能。 单端点 该项目可以充当HDFS&#xff0c;Zookeeper和MR群集…

如何将PDG文件转换成PDF文件?

1、下载Pdg2Pic软件。百度网盘链接&#xff1a;http://pan.baidu.com/s/1eQyzE Pdg2Pic.rar1.05M 来自:百度网盘点击跳转网盘 2、软件为绿色版&#xff0c;解压后直接运行。 3、选择存放PDG文件的目录。 4、选择以“图片”或是“PDF”格式输出&#xff0c;并设置相应输出路…

Jakarta EE的拟议命名空间

免责声明&#xff1a;这是我的个人观点&#xff0c;并不代表雇主的观点。 到目前为止&#xff0c;由于从Oracle迁移到Eclipse Foundation&#xff0c;每个人都知道我们需要将所有javax软件包名称重命名为其他名称。 &#xff08;供参考&#xff0c;请参阅附录A&#xff09; …

如何让.gitignore文件生效

如何让.gitignore文件生效 改动过.gitignore文件之后&#xff0c;在repo的根目录下运行 # 先将当前仓库的文件的暂存区中剔除 git rm -r --cached .# 再添加所有的文件到暂存区&#xff0c;这时.gitignore文件就会生效了 git add .# 提交 git commit -m "fixed untracke…

java identity_仔细研究Java Identity API

java identity在深入探讨之前&#xff0c;让我们看一下有关Java Identity API JSR 351的一些快速事实。 这仍在进行中。 。 。 JSR是什么时候发起的&#xff1f; 该JSR在2011年10月通过了批准投票&#xff0c;随后在2011年11月成立了专家组。 谁负责此规范&#xff1f; Jav…

隐藏任务栏后任务栏出不来怎么办?任务栏快捷键

喜欢隐藏任务栏的朋友&#xff0c;是不是发现了一个有时候隐藏任务栏&#xff0c;任务栏下沉后用鼠标去唤醒&#xff0c;以重新显示任务栏而显示&#xff0c;激活不出来的问题?十分容易解决&#xff0c;见下。使用显示任务栏的快捷键。 这些问题经常出现在比如开启了一个或者…

JDK 14中更好的NPE消息

我的2019年3月博客文章“ Java会出现更好的默认NullPointerException消息吗&#xff1f; ”是在尚未针对特定JDK版本针对更好的NullPointerException消息的JEP 草案编写时编写的。 此后&#xff0c;该JEP草案成为JEP 14的 目标 JEP 358&#xff08;“ Helpful NullPointerExcep…

jvm能识别什么字符集_识别JVM –比预期要难

jvm能识别什么字符集在Plumbr&#xff0c;我们花费了上个月的时间来为将来的重大改进奠定基础。 此类构件之一是为JVM添加唯一标识符&#xff0c;以便将来自同一JVM的所有会话链接在一起。 尽管一开始似乎是一项琐碎的任务&#xff0c;但是当查看JVM捆绑的jps命令的输出时&…

Spring MVC绑定,无设置器

即使域模型对象没有设置器&#xff0c;也可以将表单参数绑定到域模型对象。 只需添加带有InitBinder方法的ControllerAdvice类&#xff0c;即可通过initDirectFieldAccess&#xff08;&#xff09;方法将应用程序配置为进行字段绑定 package boottests.controllers;import org…

idf和adf_ADF:弹出窗口,对话框和输入组件

idf和adf在本文中&#xff0c;当我们有一个af&#xff1a;popup包含af&#xff1a;dialog并在其中包含输入组件时&#xff0c;我想重点介绍一个非常常见的用例。 实现此用例时&#xff0c;需要注意一些陷阱。 让我们考虑一个简单的示例&#xff1a; <af:popup id"p1&…

自制串口示波器小工具

因为博主喜欢玩嵌入式&#xff0c;经常与各种硬件打交道&#xff0c;常常需要采集下位机的信号&#xff0c;无奈学生党&#xff0c;买不起示波器&#xff0c;自己用python写了一个串口示波器的上位机&#xff0c;可以很简单的和下位机配合组成示波器&#xff0c;效果如图&#…

ELK堆栈入门

朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户&#xff1f; 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 好的设计原则要求微服务架构是可观察的&#xff0c;并提供集中的监视工具。 该工具使开发团队…