一、定义:
拓扑排序是对有向无回路图(DAG)顶点的一种排序,它使得如果存在从u到v的有向路径,那么满足序列中u在v前。
例如:(来自于某牛)
最后变成
所以我们的算法可以描述为这样一个过程:
1、找到整个图中所有的原点,将这些点压进队列(栈)中
2、从队列(栈)中取出一点,输出,将该点及它的边删除,找到它所指向的点,如果改点是一个原点(删除指向它的点后),则压入队列(栈)
3、重复2过程,直到它为空
应用:
1、判断有向图中是否存在回路。如果无法构成拓扑序列,那么图中存在环。
2、如果一个事件有拓扑关系(比如时间先后、重要程度),那么可以给出一种可行方案。
3、给一个图确定拓扑关系,也就是为图的DP划分阶段。在关键路径中应用比较明显。
4、2-Sat问题中给顶点染色
拓拔排序算法
时间: 2024-10-12 02:26:58