标签:运用 算法 tarjan算法 追溯 节点 dfs序 维护 路径 完全
对于一个有向图,若任意两个节点x,y都有x到y的路径和y到x的路径,称它为强联通图.一个有向图的极大强联通子图被称为强联通分量.这里的极大与无向图里的极大双联通子图类似,对于一个极大强联通子图A,不存在子图B也是双联通子图且A?B.
求有向图的强连通分量又要运用到tarjan算法.先对于有向图中的边进行定义:dfs确定dfs序后,对于一个x指向y的边,如果x是y的父节点称为树枝边,x是y的祖先(x位于y到根节点的路径上)称为前向边,y是x的祖先(y位于x到根节点的路径上)称为后向边.这四种都不是的话称为横叉边.可以发现树枝边们一定可以组成前向边的等效的路径,所以前向边没有用,完全可以删去.后向边一定能和树枝边组成一个环,从而构成一圈强连通的节点,美滋滋.最后一种横向边能构成环当且仅当y有到达x的路径.如何找到后向边与横向边构成的环呢?栈又出场了.
我们在dfs(代码中指tarjan)的时候维护一个栈,要求当访问x的时候栈内存放x的祖先和访问过的节点里存在路径到达x的祖先的节点们,
标签:运用 算法 tarjan算法 追溯 节点 dfs序 维护 路径 完全
原文地址:https://www.cnblogs.com/qywyt/p/10242446.html