首页 > 编程语言 > 详细

【学习】拓扑排序

时间:2019-09-28 18:22:55      阅读:82      评论:0      收藏:0      [点我收藏+]

前言 

这个人太菜了都要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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!