【学习】拓扑排序

前言 

这个人太菜了都要CSP了才学拓扑排序

 

0x10 定义

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

                                                              ——蓝书·lyd

0x20 思想+过程

选择入度为0的点,然后把他连向的点入读减1就行了

过程:

1.建立空的序列A

2.预处理所有点的入度,把入度为0的点入队

3.取队头x,把x放在A的末尾

4.遍历从x连出的y点,并把y的入度减1,如果这是y的入度为0,入队

5.循环3,4直至队列为空,得到A序列

0x30 用处+题目

①判环

②处理图上有明显先后顺序要求的题目

Luogu P1038 神经网络

Luogu P2661 信息传递

0x40 code

 1 void topsort(){
 2     queue<int>q;
 3     int x,v;
 4     for(int i=1;i<=n;i++){
 5         if(!r[i])q.push(i);//如果入度为零,入队
 6     }
 7     while(!q.empty()){
 8         x=q.front();q.pop();
 9         a[++tot]=x;
10         for(int i=head[x];i;i=e[i].nxt){
11             v=e[i].to;--r[v];
12             if(!r[v])q.push(v);
13         }
14     }
15 }
topsort

 

转载于:https://www.cnblogs.com/gengyf/p/11604071.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值