拓扑排序-
有向无环图是拓扑排序
拓扑排序将图中所有的顶点排成一个线性序列,使得所有的有向边均从序列的前面指向后面。
拓扑排序使用深度优先搜索来实现,图中有环则无法进行拓扑排序
一个有向图,如果图中有入度为0的点,就把这个点删掉,同时也删掉这个点所连的边
一直进行上面的处理过程,如果发现所有的点都能被删掉,则这个图可以进行拓扑排序



算法思路:首先记录各个点的入度
然后将入度为0的点放入队列,将队列里的点依次出对,然后删除这个点出发的边,删掉这个边同时边的另一侧的入度-1
如果所有的点都进过队列,则可以进行拓扑排序,否则输出-1,代表不能进行拓扑排序
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int N = 100010;
vector<int> g[N]; // 邻接表存储图
int in_degree[N]; // 记录每个点的入度
int n, m; // n 个点,m 条边
bool topological_sort() {
queue<int> q;
for (int i = 1; i <= n; i++) {
if (in_degree[i] == 0) {
q.push(i); // 将所有入度为 0 的点加入队列
}
}
while (!q.empty()) {
int u = q.front();
q.pop();
cout << u << " "; // 输出拓扑排序的顺序
for (auto v : g[u]) {
in_degree[v]--; // 删除边 (u, v)
if (in_degree[v] == 0) {
q.push(v); // 如果节点 v 的入度变为 0,则加入队列
}
}
}
// 如果所有点都被访问过,说明是有向无环图,返回 true
for (int i = 1; i <= n; i++) {
if (in_degree[i] != 0) {
return false;
}
}
return true;
}
int main() {
cin >> n >> m; // 输入点的个数和边的个数
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
g[a].push_back(b); // 添加边 (a, b)
in_degree[b]++; // b 的入度加 1
}
if (topological_sort()) {
cout << "拓扑排序结果:";
} else {
cout << "图中存在环!";
}
return 0;
}
相关文章:
拓扑排序-
有向无环图是拓扑排序 拓扑排序将图中所有的顶点排成一个线性序列,使得所有的有向边均从序列的前面指向后面。 拓扑排序使用深度优先搜索来实现,图中有环则无法进行拓扑排序 一个有向图,如果图中有入度为0的点,就把这个点删掉…...
Oracle数据库如何定位trace file位置
用一个示例来说明吧。 在导入master key时,出现错误: ADMINISTER KEY MANAGEMENTIMPORT KEYS WITH SECRET "my_secret"FROM /tmp/export.expIDENTIFIED BY keypwd5 WITH BACKUP; ADMINISTER KEY MANAGEMENT * ERROR at line 1: ORA-46655…...
电脑盘符错乱,C盘变成D盘怎么办?
在一些特殊情况下,磁盘盘符会出现错乱,C盘可能会变成D盘。那么,这该怎么办呢?下面我们就来了解一下。 通过磁盘管理更改盘符 磁盘管理是Windows自带的工具,它位于“计算机管理”的控制台中。管理硬盘及其所包含的卷或…...
Android WMS——客户端输入事件处理(十九)
前面的文章我们介绍了 WMS 中的输入服务的启动及事件处理,这一篇我们来看一下客户端对输入事件的处理。 一、事件初始化 事件的初始化就是在添加窗口的过程。 1、ViewRootImpl 源码位置:/frameworks/base/core/java/android/view/ViewRootImpl.java public void setView(…...
Python基础学习__测试报告
# 使用pycharm生成报告:只有在单独执行一个TestCase文件时可以生成,使用TestSuite等就不能用了 # 使用第三方的测试报告:例如:HTMLTestRunner第三方类库 #使用HTMLTestRunner这个执行对象# 1.获取第三方的测试运行类Runner模块(一个py文件),将其放在代码目录下 # 2.导包:unitte…...
bclinux aarch64 ceph 14.2.10 云主机 4节点 fio
ceph -s 由于是基于底层分布式存储的云主机,数据仅供参考 本地云盘性能 direct1 1M读取 IOPS134, BW134MiB/s [rootceph-client rbd]# cd / [rootceph-client /]# fio -filenamefio.bin -direct1 -iodepth 128 -thread -rwread -ioenginelibaio -bs1M -size10G -n…...
智能座舱架构与芯片- (14) 测试篇 上
一、 验证平台概要 1.1 测试软件方法论 “软件定义汽车” 的时代,软件在整车制造中的重要性日渐凸显。但不同于其他行业的软件开发,汽车行业有自己独特的软件开发要求。首先是需求严谨、需求层次复杂、需要通过专业的工具进行管理;其次开发…...
【Django-DRF用法】多年积累md笔记,第3篇:Django-DRF的序列化和反序列化详解
本文从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计REST API,通过使用Django来实现一个REST API为例,明确后端开发REST API要做的最核心工作,然后介绍Django REST framework能帮助我们简化开发REST API的工作。 全…...
Redis主从复制,哨兵和Cluster集群
主从复制: 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份(和同步),以及对于读操作的负载均衡和简单的故障恢复。 缺陷:故障恢复无法自动化…...
Linux嵌入式I2C协议笔记
硬件: 1.I2C结构 在一个SOC中有一个或者多个I2C控制器,一个I2C控制器可以连接一个或多个I2C设备。 I2C总线需要两条线,时钟线SCL和数据线SDA 2.I2C传输数据格式 开始信号(S):SCL为高电平时,S…...
科技的成就(五十三)
503、任天堂首次公开 Switch 2016 年 10 月 20 日,任天堂首次公开 Switch 正式名称及造型。Switch 是任天堂推出的混合型游戏机,可作为家用游戏机,也可作为便携式掌机。Switch 在开发过程中就以代号 NX 而闻名,成为当年的现象级产…...
Ubuntu22.04 编译 AOSP
在 Ubuntu 22.04 系统上搭建环境编译 AOSP(Android Open Source Project)需要进行以下步骤: 1, 更新系统:首先,确保您的 Ubuntu 22.04 系统已经更新到最新版本。可以使用以下命令进行系统更新: sudo apt update sudo apt upgrade2,安装必要的软件包:AOSP 编译需要一些…...
【计算机网络】多路复用的三种方案
文章目录 1. selectselect函数select的工作特性select的缺点 2. pollpoll函数poll与select的对比 3. epollepoll的三个接口epoll的工作原理epoll的优点LT和ET模式epoll的应用场景 🔎Linux提供三种不同的多路转接(又称多路复用)的方案…...
供应链和物流的自动化新时代
今天,当大多数人想到物流自动化时,他们会想到设备。机器人、无人机和自主卡车运输在大家的谈话中占主导地位。全自动化仓库的视频在网上流传,新闻主播们为就业问题绞尽脑汁。这种炒作是不完整的,它错过了供应链和物流公司的机会。…...
Python与ArcGIS系列(九)自定义python地理处理工具
目录 0 简述1 创建自定义地理处理工具2 创建python工具箱0 简述 在arcgis中可以进行自定义工具箱,将脚本嵌入到自定义的可交互窗口工具中。本篇将介绍如何利用arcpy实现创建自定义地理处理工具以及创建python工具箱。 1 创建自定义地理处理工具 在arctoolbox中的自定义工具箱…...
Nginx部署前端项目
Nginx部署前端项目 1.在nginx官网http://nginx.org/en/download.html ,下载稳定版本: 2.解压后,点击根目录中的nginx.exe即可启动Nginx,或是在nginx安装目录中启动cmd并输入以下命令启动: nginx.exe 或 start nginx3…...
根据文件类型进行下载, 文档/图片
根据文件类型进行下载, 文档/图片 function loadFile(fileUrl, fileName) {if (isImageByExtension(fileUrl)) {try {downloadRes(fileUrl, fileName)} catch (error) {downloadFile(fileUrl, fileName)}} else {downloadRes(fileUrl, fileName)} } const downloadFile (file…...
赋范线性空间3
赋范线性空间三 文章目录 赋范线性空间三三、内积空间3.1 内积空间的定义和性质【定义】内积【定理】内积的性质——Schwarz不等式【定义】有内积导出的范数【定理】内积、由内积导出的范数 的性质 3.2 正交与正交系【定义】正交、正交补【定理】勾股定理在内积空间中的推广【定…...
XSLVGL2.0 User Manual 缩略图生成器(v2.0)
XSLVGL2.0 开发手册 XSLVGL2.0 User Manual 缩略图生成器 1、概述2、特性3、APIs3.1、xs_system_init_thumbnail3.2、xs_system_exit_thumbnail3.3、xs_system_get_thumbnail3.4、xs_system_thumbnail_on_cache_to_storage_defalut4、使用方法5、自定义缩略图生成方法1、概述 …...
练习八-利用有限状态机进行时序逻辑的设计
利用有限状态机进行时序逻辑的设计 1,任务目的:2,RTL代码,及原理框图3,测试代码,输出波形 1,任务目的: (1)掌握利用有限状态机实现一般时序逻辑分析的方法&am…...
WarcraftHelper:5分钟解锁魔兽争霸3完整游戏体验的终极指南
WarcraftHelper:5分钟解锁魔兽争霸3完整游戏体验的终极指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸3》在现代电脑…...
告别玄学调试:用逻辑分析仪抓取STM32的PWM波形,验证无刷电机驱动时序
从波形诊断到精准调参:逻辑分析仪在无刷电机驱动开发中的实战应用 调试无刷电机驱动时,你是否经历过这样的困境:代码配置看似正确,但电机就是纹丝不动;或者电机虽然转动却伴随异常噪音和发热?传统"试错…...
AI编程提示词精选集:提升GitHub Copilot协作效率的实战指南
1. 项目概述与核心价值如果你是一名开发者,并且正在使用 GitHub Copilot、Cursor、Claude Code 或者任何集成在 VSCode 里的 AI 编程助手,那你一定有过这样的体验:有时候它聪明得像个天才,能精准预测你的下一行代码;有…...
AISMM评估的5层价值金字塔(SITS2026框架首发):从合规底线→董事会语言→商业谈判筹码
更多请点击: https://intelliparadigm.com 第一章:AISMM评估的5层价值金字塔(SITS2026框架首发):从合规底线→董事会语言→商业谈判筹码 AISMM(AI System Maturity Model)在SITS2026框架下首次…...
开发者技能图谱实战指南:从系统思维到云原生架构的完整学习路径
1. 项目概述:一个面向开发者的技能图谱与实战指南最近在GitHub上看到一个挺有意思的项目,叫“spaceship-skills”。初看标题,你可能会联想到科幻电影里的星际飞船操作手册。实际上,这个项目是一个精心编排的、面向现代软件开发者的…...
10个Windows Terminal命令行参数技巧:让你的终端启动效率提升10倍!
10个Windows Terminal命令行参数技巧:让你的终端启动效率提升10倍! 【免费下载链接】terminal The new Windows Terminal and the original Windows console host, all in the same place! 项目地址: https://gitcode.com/GitHub_Trending/term/termin…...
观察 Taotoken 官方折扣活动对个人开发者使用成本的实际影响
观察 Taotoken 官方折扣活动对个人开发者使用成本的实际影响 1. 折扣活动与成本感知的基本逻辑 对于个人开发者或学生用户而言,大模型 API 的使用成本往往是项目实验中的重要考量因素。Taotoken 平台提供的透明计费机制,结合官方折扣活动,能…...
AISMM不是ISO替代品——20年信息治理专家拆解其不可替代的7层风控价值
更多请点击: https://intelliparadigm.com 第一章:SITS2026圆桌:AISMM的全球推广 在2026年新加坡国际技术峰会(SITS2026)上,AISMM(AI-Driven Software Maturity Model)正式成为全球…...
支付账单拉取和标准化怎么做才稳?渠道获取、格式解析、统一账单模型全讲清
支付账单拉取和标准化怎么做才稳?渠道获取、格式解析、统一账单模型全讲清 这篇直接按支付账单拉取和标准化来拆,不只讲“把文件拉下来”,而是把渠道差异、格式解析、统一模型和补拉讲具体。 目标是你看完后,能把账单拉取从一个下…...
为 Hermes Agent 配置 Taotoken 自定义供应商的详细步骤
为 Hermes Agent 配置 Taotoken 自定义供应商的详细步骤 Hermes Agent 是一个功能强大的 AI 代理开发框架,支持通过自定义供应商接入不同的模型服务。如果你正在使用 Taotoken 平台来统一管理和调用多种大模型,将其配置为 Hermes Agent 的自定义供应商是…...
