1. 判断是否为有向无环图(O(|V|+|E|))
通过DFS获取所有节点的pre值(第一次访问节点N),post值(第二次[最后一次]访问节点N);通过pre值判断是否有回边(若u[]->v{},{[]}则有回边)。
2.由有向无环图获取拓扑排序(O(|V|+|E|))
方法一:不断去除源点(只有出边),所获源点序列即为拓扑排序
所有源点入队->源点N出队->源点N相邻节点M入度-1,若入度为0,则M作为新源点入队->队列空,结束;队列不空,源点继续出队
方法二:
DFS,完成(获得post值)的节点入队
3. 利用DFS在有向图中获取强连通图(O(|V|+|E|))
1. 对图进行DFS,记录post值
2. 将图的边取反
3. 对post值最大的点进行DFS,获得一个强连通分量,从图中删去这个强连通分量,重复步骤3
PS
双向队列 不需换档的放队头,需要换档的放队尾