拓拔排序算法

本文介绍了拓扑排序的概念及其算法流程,适用于有向无回路图(DAG),并列举了多种应用场景,包括判断有向图中是否存在回路、事件排序、图的DP阶段划分等。

一、定义:

 

拓扑排序是对有向无回路图(DAG)顶点的一种排序,它使得如果存在从u到v的有向路径,那么满足序列中u在v前。

例如:(来自于某牛)

 

最后变成

 

所以我们的算法可以描述为这样一个过程:

1、找到整个图中所有的原点,将这些点压进队列(栈)中

2、从队列(栈)中取出一点,输出,将该点及它的边删除,找到它所指向的点,如果改点是一个原点(删除指向它的点后),则压入队列(栈)

3、重复2过程,直到它为空

应用:

1、判断有向图中是否存在回路。如果无法构成拓扑序列,那么图中存在环。

2、如果一个事件有拓扑关系(比如时间先后、重要程度),那么可以给出一种可行方案。

3、给一个图确定拓扑关系,也就是为图的DP划分阶段。在关键路径中应用比较明显。

4、2-Sat问题中给顶点染色

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值