首页 > 其他分享 >拓扑排序学习笔记

拓扑排序学习笔记

时间:2023-10-10 23:16:03浏览次数:38  
标签:int 拓扑 入度 笔记 环图 序列 排序

拓扑排序 - oiwiki


在有向无环图中,若一个由该图中所有点构成的序列满足:图中所有边 (x,y),x 在序列 A 中都出现在 y 前,则称 A 是该图的一个拓扑序。求解序列 A 的过程就叫拓扑排序。

拓扑排序可以解决一个有向无环图的所有节点排序。我理解的话,就是按每个店的入度多少的顺序找到一种有序的遍历有向无环图的方式。

求拓扑排序:把入度为 0 的点加到队列中,然后遍历他能到达的点。将到达的点入度 -1,如果出现入度为 0 的点就将它再加入队列。

至于想要维护存在情况互不影响的点出现的先后顺序,可以用堆实现。


1.拓扑排序模板

B3644 【模板】拓扑排序 / 家谱树

#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n;
int rd[N];
int ans[N],tot;
queue<int> q;
vector<int> e[N];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		int x;
		while(scanf("%d",&x)){
			if(x){
				e[i].push_back(x);
				rd[x]++;
			}
			else break;
		}
	}
	for(int i=1;i<=n;i++) if(!rd[i]) q.push(i);
	while(q.size()){
		int x=q.front();
		q.pop();
		ans[++tot]=x;
		for(auto i:e[x]){
			rd[i]--;
			if(rd[i]==0) q.push(i);
		}
	}
	for(int i=1;i<=n;i++) printf("%d ",ans[i]);
	return 0;
}

标签:int,拓扑,入度,笔记,环图,序列,排序
From: https://www.cnblogs.com/Moyyer-suiy/p/17755751.html

相关文章

  • 代码大全阅读笔记01
    1、开发前期准备相关需求阶段在需求阶段,我们需要明确定义用户的需求,这样不仅能够避免与用户的争议,还能够更好地让用户更快地熟悉系统、使用系统;处于该阶段的错误的解决时间最好接近于发现错误的时间,不然越拖越久,改正错误的代价就会相应的增大;架构优秀的软件架构很大程度上与......
  • ubuntu 设置合上笔记本盖子不休眠的方法
    编辑下列文件:sudogedit/etc/systemd/logind.conf#HandlePowerKey按下电源键后的行为,默认poweroff#HandleSleepKey按下挂起键后的行为,默认suspend#HandleHibernateKey按下休眠键后的行为,默认hibernate#HandleLidSwitch合上笔记本盖后的行为,一般为默认suspend(改为ignore;即合盖不......
  • Programming abstractions in C阅读笔记:p176-p178
    《ProgrammingAbstractionsInC》学习第59天,p176-p178总结。一、技术总结1.addtivesequencestn=tn-1+tn-2序列:3,7,10,17,27,44,71,115,186,301,487,788,1275,...p177,Asageneralclass,thesequencesthatfollowthispatternarecalledadditivesequen......
  • Programming abstractions in C阅读笔记:p176-p178
    《ProgrammingAbstractionsInC》学习第59天,p176-p178总结。一、技术总结1.addtivesequencestn=tn-1+tn-2序列:3,7,10,17,27,44,71,115,186,301,487,788,1275,...p177,Asageneralclass,thesequencesthatfollowthispatternarecalledadditive......
  • c++对象模型学习笔记
    参照大佬的博客学习了一下c++的对象模型:https://www.cnblogs.com/skynet/p/3343726.html有些思考需要做下记录。对于有虚函数表的类的对象,它的起始地址处会存储vptr指向虚函数表,在这个虚函数表的前4或8字节中,会存储一个地址值,指向RTTI类型信息对于没有虚函数表的类的对象,也就......
  • npm笔记
    npmconfigsetcache"D:\nodejs\node_cache"//设置缓存文件夹npmconfigsetprefix"D:\nodejs\node_global"//设置全局模块存放路径npminstall-gcnpm--registry=https://registry.npm.taobao.orgnpminstallyarn-gyarnconfigsetglobal-folder&qu......
  • SQLAlchemy学习-12.查询之 order_by 按desc 降序排序
    前言sqlalchemy的query默认是按id升序进行排序的,当我们需要按某个字段降序排序,就需要用到order_by。order_by排序默认情况下sqlalchemy的query默认是按id升序进行排序的res=session.query(Project).all()print(res)#[<Project(id='1',project_name='string'.........
  • Python 常见排序:冒泡、选择、快速
    简单说明:1.冒泡排序:双层循环,交替结果2.选择排序:whilenums,假设第一个值为做小,通过for循环找到最小值以此来替换,再将nums中该值去掉继续上述步骤3.快速排序:定义一个初值,把整个数据列表分为两部分,再递归代码实现:#冒泡排序defaction1(n):foriinrange(len(n)):......
  • 莫比乌斯反演 学习笔记
    前置知识整除分块把之前写的博客搬过来了模型求\(\large\sum^{n}_{i=1}\lfloor{\frac{n}{i}}\rfloor\)假设\(n\)等于10,我们可以列出下表:\(\i\)12345678910\(\frac{10}{i}\)10532211111如果我们的\(n\)更大时,我们可以发现\(\fra......
  • tar命令的基础使用(笔记)
    tar命令的基础使用tar[选项][文件]基本操作exam:tar-cfarchive.tarfoobar#归档tar-tvfarchive.tar#列出归档tar-xfarchive.tar#解包选项作用-c创建-t列出归档内容-f指定文件-x从归档中解出文件-v显示更多......