步骤:1.任选一个节点对图做深度遍历,为每个节点标记开始和结束时间。
2.按照结束时间从小到大的顺序将节点入栈,并将图中的方向反置。
3.按照出栈顺序对节点做深度遍历,每遍历一次,就是一个强连通分量。
举例:
步骤一:标记开始和结束时间。假设从r开始遍历,则r的开始时间是1,u的开始时间为2,y为3,q为4,以此类推。到w时,开始时间为7。w没有未访问相邻接点,此节点开始结束,结束时间为8。v的结束时间为9,s为10.到达q节点时,有未访问的相邻节点t,则t的开始时间为11,x为12,z为13.以此类推,完成所有节点开始时间和结束时间的标记。
步骤二:按照结束时间从小到大把节点入栈。并将图反置。
入栈顺序为:w,v,s,z,x,t,q,y,u,r
步骤三:对节点出栈,并开始深度遍历。每遍历一次,得到一个连通分量。
出栈顺序为:r,u,y,q,t,x,z,s,v,w
对r做深度遍历得到:r
对u做深度遍历得到:u
对y做深度遍历得到:y,t,q
q,t已经被遍历到,不再从此节点开始做深度遍历。
对x做深度遍历得到:x,z
对s做深度遍历得到:s,w,v.
于是得到五个连通分量{r},{u},{y,t,q},{x,z},{s,w,v}
其Component DAG如下:
如有错误,欢迎指正