如果一个有向图中的没对顶点都可以从通过路径可达,那么就称这个图是强连通的。一个 strongly connected component就是一个有向图中最大的强连通子图。下图中就有三个强连通子图:
应用kosaraju算法,可以在O(v+e)的时间内找到强连通子图。下面是kosaraju算法的具体步骤:
1,创建一个stack,对图进行深度优先遍历。对于每一个节点,当应用DFS遍历其所有邻接点返回之后把它压入stack。
2,改变图中所有边的方向,以获得该图的方向图。
3,在stack非空的条件下不断的弹出节点v,对于每个节点v,都把它当做起始节点对它进行深度优先遍历。由对v为起始节点进行的深度优先遍历打印出的节点组成的图是强连通子图。
算法怎么理解呢:首先,对于强连通图进行深度优先遍历,得到的一定是一棵树。但是对于一个非强连通图,进行深度优先遍历,最后生成的有可能是一个树