强连通分量总结
理论知识:
定义:在有向图中如果两个顶点<u,v>之间,有一条u到v的通路,同时还有一条v到u的通路则称这两个点强连通,如果有向图的任意两个顶点都是强连通则称这个图为强连通图
有向图的极大强连通子图成为强连通分量。
极大强连通子图:一个图的顶点中两两之间强连通的最大的顶点的集合称为极大强连通子图,强连通图的极大强连通子图就是它本身,
极小连通子图只存在于与联通的无向图中,之所以说它极小,是因为极小连通子图只要求包含图中所有顶点及其比顶点数量少一个的边(且不能成环),也就是说如果给极小连通子图任意两个顶点间加入一条边,则必有环.
求法:运用tarjan算法求解:tarjan算法中有两个数组low[]和dfn[],数组low储存当前点所在的强连通子图所在的搜索子树的根节点的dfn值,dfn数组储存在这个搜索子树中当前点是第几个搜索到的
Tarjan算法步骤:
1、当第一次搜索时,当前点的dfn值和low值都是0;
2、将当前搜索到的点u入栈,
3、找到所有与u相连的点,如果这个点没被搜索过则对其进行tarjan算法的搜索(此处使用回溯),并且将low[u]和dfn[u]中较小的一个赋值给low[u],如果这个点被搜索过,即并且在栈中,将low[u]和dfn[v](v是与u相连的一个顶点)中较小的赋值给low[u],
4、最后搜索到low[u]==dfn[u]结束,因为强连通子图必然成环,删除栈中元素,取消入栈标记