图论算法(2)—————拓扑排序

news2024/11/15 9:29:43

在几天前写了一篇最小生成树的文章

今天再讲解一下图论的另一个算法:拓扑排序

注:今天只讲解kahn算法,各位如果对dfs算法有需求可联系我进行讲解

说到拓扑排序,不得不先了解下拓扑是个什么东东

拓扑,它是一种结构

网络拓扑结构是指把网络电缆等各种传输媒体的物理连接等物理布局特征,通过借用几何学中的点与线这两种最基本的图形元素描述,抽象地来讨论网络系统中各个端点相互连接的方法、形式与几何形状,可表示出网络服务器、工作站、网络设备的网络配置和相互之间的连接。它的结构主要有总线型结构、星型结构、环型结构、树型结构、网状结构。 [3] 

计算机网络的拓扑结构分析是指从逻辑上抽象出网上计算机、网络设备以及传输媒介所构成的线与节点间的关系加以研究的一种研究方式。在进行计算机网络拓扑结构设计的过程中,通过对网络节点进行有效控制,对节点与线的连接形式进行有效选取,已经成为合理计算机网络拓扑结构构建的关键。设计人员对计算机网络拓扑结构进行有效选择,可以在很大程度上促进当前网络体系的运行效果,从根本上改善技术性能的可靠性、安全性。

                                                                                                        ————百度百科

拓扑本身实在是太复杂了,简而言之就是网络中各个站点相互连接的形式

还是说回我们的拓扑排序:

拓扑排序的介绍:

他是对一个图进行一个遍历,如果他是DAG(有向无环图),则生成一个序列,否则便可发现这个图有环路

这么说还是太抽象了,根本听不懂

还是画个小图:

 一个很典型的DAG

第一步:定义一个队列,找出入度为0的点并入队

这个图中入度为0的点就是1

将他入队

并将他在图中删除

这时可以发现:2 3 4 5这些点的入度各减一,也就变成了这样:

。。。就变成了这样

 继续刚才的步骤,寻找入度为0的,也就是3

 别嫌烦,继续重复步骤

就只剩一个点4了,这就证明这个图是DAG

有些同学不理解,为什么要寻找入度为0的

我们举一个反例:

依然重复上面的步骤:

 

细心的同学会发现,不能重复上面的步骤了,所以它不是DAG

 

可还是刚才的问题:为什么要寻找入度为0的点?

首先我们要明确入度代表什么意思?

一个结点有入度,说明他是某某点的祖孙

所以说:入度为零代表他是目前的祖先(最高的祖先)

那么如果一个图找不到祖先了,那说明什么?一定有回路啊!、

现在同学们明白为什么要进行这样的操作了吧

接下来就是代码了:

我们拓扑排序继续采用链式前向星的存储方式

这个博主讲的不错[doge]

不懂的同学及时进行查看,本篇文章不对链式前向星做任何的讲解,如果有问题也可即使私信我

写任何题目的时候都要先写主函数

但是我们讲解的是算法,而不是具体题目,所以我们只出示kahn算法

按照刚才的思路,同学们自己先写一下

这里直接就给标程了

还是那句话,有任何不懂的随时评论区或私信我

void kahn(){
	queue<int> q;
	for (int i=1;i<=n;i++)
	{
		if (din[i]==0){
			q.push(i);
			printf("%lld ",i); 
		} 
	}//入度为0则进队列 
	
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for (int i=adj[u];i;i=e[i].next){
			int v=e[i].to;
			din[v]--;
			if (din[v]==0){
				q.push(v);
				printf("%lld ",v);
			}
		}
	}
}

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

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

相关文章

Elasticsearch 进阶

一、核心概念 1.1 索引(Index) 一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新…

[附源码]计算机毕业设计JAVA音乐交流平台

[附源码]计算机毕业设计JAVA音乐交流平台 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

【数字逻辑】——逻辑函数及其简化(学习笔记)

&#x1f4d6; 前言&#xff1a;1849年英国数学家乔治&#xff0c;布尔&#xff08; George Boole &#xff09;首先提出了描述客观事物逻辑关系的数学方法&#xfe63;布尔代数。1938年克劳德&#xff0e;香农&#xff08; Claude E . Shannon &#xff09;将布尔代数应用到继…

深度学习-BN(Batch Normalization)

1. 介绍 Batch Normalization是2015年一篇论文中提出的数据归一化\color{blue}{数据归一化}数据归一化方法&#xff0c;往往用在深度神经网络中激活层之前。其作用可以加快模型训练时的收敛速度&#xff0c;使得模型训练过程更加稳定&#xff0c;避免梯度爆炸或者梯度消失。并且…

postgresql 数据库导出和导入

简介 本篇文章主要介绍PostgreSQL库和表的导出和导入以及常用的数据库管理工具的使用 一、数据库的导出和导入 1. 使用pgAdmin导出和导入数据库 导出 导入 新建数据库&#xff0c;右键Restore 2. 使用Navicate导出和导入数据库 导出 选择要导出的数据库&#xff0c;点…

【小f的刷题笔记】(JS)数组 - 差分数组 LeetCode1109 LeetCode1094

【数组】 差分数组&#xff1a; &#x1f31f; 频繁对原始数组的某个区间的元素进⾏增减 ✔ 把每个数与前一个数的差值计算出来存在一个新数组里&#xff0c;区间的加减通过把新数组中区间开始下标的值加/减&#xff0c;区间结束下标对应的值减/加&#xff08;反一下&#x…

软件工程笔记

软件工程软件工程:指导计算机软件系统开发和维护的工程学科:目的:有序,可控,可管理软件工程方法学要素:方法,工具,过程软件:程序数据文档软件分类:软件生命周期补充:软件工程方法:软件生命周期中使用的一整套技术评价标准:软件开发方法:软件工程:指导计算机软件系统开发和维护的…

蓝桥杯时间显示

题目描述 小蓝要和朋友合作开发一个时间显示的网站。 在服务器上&#xff0c;朋友已经获取了当前的时间&#xff0c;用一个整数表示&#xff0c;值为从 19701970 年 11 月 11 日 00:00:0000:00:00 到当前时刻经过的毫秒数。 现在&#xff0c;小蓝要在客户端显示出这个时间。…

[附源码]Python计算机毕业设计Django社区疫情防控信息管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

【有营养的算法笔记】快速排序

&#x1f451;作者主页&#xff1a;进击的安度因 &#x1f3e0;学习社区&#xff1a;进击的安度因&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;有营养的算法笔记 文章目录一、思路二、模板讲解三、模板测试四、加练 —— 第 K 个数今天正式开启算法笔记…

生产型外协管理系统:功能解析篇

随着经济全球化与电商的全面发展&#xff0c;生产型企业的生产订单是在逐年生产的。由于自身的生产能力有限&#xff0c;很多企业不得不将些许业务进行外包生产&#xff0c;也就是所谓的外协生产。既然需要外协生产的话&#xff0c;那么对外协生产进行管理也就尤为重要了。作为…

[附源码]计算机毕业设计软考刷题小程序Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Express:JSONP 接口

JSONP 接口 1. 回顾 JSONP 的概念与特点 概念&#xff1a;浏览器端通过 <script> 标签的 src 属性&#xff0c;请求服务器上的数据&#xff0c;同时&#xff0c;服务器返回一个函数的调用。这种请求数据的方式叫做 JSONP。 特点&#xff1a; ①JSONP 不属于真正的 Aj…

ASEMI整流桥KBU808参数,KBU808尺寸,KBU808大小

编辑-Z ASEMI整流桥KBU808参数&#xff1a; 型号&#xff1a;KBU808 最大重复峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;800V 最大RMS电桥输入电压&#xff08;VRMS&#xff09;&#xff1a;560V 最大直流阻断电压&#xff08;VDC&#xff09;&#xff1a;800…

Linux学习-72-GRUB加密方法(2种加密方式)

16.14 GRUB加密方法&#xff08;2种加密方式&#xff09; Linux 在启动时&#xff0c;在 GRUB 管理界面中是可以通过按"e"键进入编辑模式&#xff0c;修改启动选项的。每个启动选项都支持按"e"键进入编辑模式。在编辑模式中可以修改启动模式&#xff0c;比…

有必要好好学习一下dc_shell了

首先最好是有design compiler user guide&#xff0c;哪里不会找哪里&#xff1f;然后来看看常见的dc_shell 命令 一般先要起一个dc_shell。 dc_shell 启动以后&#xff0c;使用 read_ddc xxx/DBs/ddc/<block_name>.ddc 将design compiler的综合结果读入。 为了确认读入…

GitHub上热门的Java开源项目

1 JavaGuide https://github.com/Snailclimb/JavaGuide Star 26396 一份Java学习指南&#xff0c;涵盖大部分Java程序员所需要掌握的核心知识 2 DoraemonKit https://github.com/didi/DoraemonKit Star 4826 简称 "DoKit"&#xff0c;中文名哆啦A梦&#xff0c;意…

数学建模三大类模型适用场景及建模方法(纯干货)

目录 一&#xff0c;评价类算法 1&#xff0c;层次分析法 ●基本思想: ●基本步骤: ●优点: ●缺点 ●适用范围: ●改进方法: 2&#xff0c;灰色综合评价法&#xff08;灰色关联度分析&#xff09; ●基本思想: ●基本步骤: ●优点: ●缺点: ●适用范围: ●改进方…

TMS FMX Cloud提供集成元素

TMS FMX Cloud提供集成元素 TMS FMX云包能够为用户和开发人员提供从Firemonkey软件到云光解决方案的可访问性。TMS FMX云包基本上由能够与不同的云解决方案一起提供集成的元素组成。 每当FMX计数增加时&#xff0c;性能就会下降。 有一个基本的设计时集成可用。 基于架构的火猴…

探花交友_第2章_环境搭建(新版)

探花交友_第2章_环境搭建&#xff08;新版&#xff09; 文章目录探花交友_第2章_环境搭建&#xff08;新版&#xff09;课程介绍 《探花交友》1、项目介绍1.1、项目背景1.2、市场分析1.3、目标用户群体1.4、使用场景1.5、竞争对手分析1.5.1、竞品选择1.5.2、竞品分析1.6、项目简…