图论应用——拓扑排序

news/2024/9/25 8:24:41/

拓扑排序的原理和宽度优先搜索差不多

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


http://www.ppmy.cn/news/1438196.html

相关文章

【堆】Leetcode 215. 数组中的第K个最大元素【中等】

数组中的第K个最大元素 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输…

异次元店铺商品系统自带支付源码

异次元店铺系统是荔枝店铺系统3.0的完全重构版本&#xff0c;从零开始编写&#xff0c;采用原生php开发。数据库底层使用Eloquent ORM&#xff0c;模板渲染使用Smarty3.1以及PHP原生渲染&#xff0c;会话保持全程使用session。以下是一些主要功能的简要介绍&#xff1a; 下 载…

Java调用tess4j完成 OCR 文字识别

1&#xff0c;新建 maven 工程 2&#xff0c;引入依赖 <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>5.11.0</version> </dependency> 3…

牛客NC238 加起来和为目标值的组合【中等 DFS C++、Java、Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/172e6420abf84c11840ed6b36a48f8cd 思路 本题是组合问题&#xff0c;相同元素不同排列仍然看作一个结果。 穷经所有的可能子集&#xff0c;若和等于target&#xff0c;加入最终结果集合。 给nums排序是为了方便…

AI-数学-高中-44导数的运算法则

原作者视频&#xff1a;【导数】【一数辞典】3导数的运算法则&#xff08;略难&#xff09;_哔哩哔哩_bilibili 三种求导表达方式一样的&#xff0c;中间的比较常用&#xff1a; 链式法则&#xff1a;从外向内&#xff1a;

JavaEE——Spring Boot + jwt

目录 什么是Spring Boot jwt&#xff1f; 如何实现Spring Boot jwt&#xff1a; 1. 添加依赖 2、创建JWT工具类 3. 定义认证逻辑 4. 添加过滤器 5、 http请求测试 什么是Spring Boot jwt&#xff1f; Spring Boot和JWT&#xff08;JSON Web Token&#xff09;是一对常…

【Linux】详解信号产生的方式

一、kill命令 在命令行中通过kill -数字 pid指令可以给指定进程发送指定信号。这里说明一下几个常见的信号&#xff1a; SIGINT&#xff08;2号信号&#xff09;&#xff1a;中断信号&#xff0c;通常由用户按下CtrlC产生&#xff0c;用于通知进程终止。SIGQUIT&#xff08;3号…

【MySQL】DML

1、DML简介 DML&#xff08;Data Manipulation Language、数据操作语言&#xff09;&#xff0c;用于添加、删除、更新和查询数据库记录&#xff0c;并检查数据完整性。 2. 添加数据 2.1 使用关键字 使用 INSERT 语句向表中插入数据。使用 VALUES语句添加 2.2 使用情况 2.2…