强连通分量
提示
- 强连通分量定义:强连通分量是有向图中的一部分,其中任意两个顶点都通过路径相互可达。
- Kosaraju算法:这是一种用于寻找有向图中所有强连通分量的算法,包括三个步骤:对整个图进行深度优先搜索,反转原始图,再次对反转图执行深度优先搜索。
- 应用场景:强连通分量的概念应用于车辆路线规划、地图制作和模型检查等领域。
强连通分量是有向图的一部分,在这部分中,每个顶点都可以通过路径到达另一个顶点。它只适用于有向图。
例如:
让我们看下面的图。
上图的强连 通分量是:
你可以观察到,在第一个强连通分量中,每个顶点都可以通过有向路径到达另一个顶点。
这些分量可以使用Kosaraju 算法找到。
Kosaraju 算法
Kosaraju 算法基于深度优先搜索算法,实施两次。
涉及三个步骤。
- 对整个图执行深度优先搜索。
让我们从顶点-0开始,访问它的所有子顶点,并将访问过的顶点标记为已完成。如果一个顶点指向已访问过的顶点,那么将这个顶点推入栈中。
例如:从顶点-0开始,依次前往顶点-1、顶点-2,然后到顶点-3。顶点-3指向已经访问过的顶点-0,所以将源顶点(即顶点-3)推入栈中。
回到前一个顶点(顶点-2)并访问其子顶点,即顶点-4、顶点-5、顶点-6和顶点-7。由于顶点-7无处可去,将其推入栈中。
回到前一个顶点(顶点-6)并访问其子顶点。但是,它的所有子顶点都已被访问,所以将其推入栈中。
类似地,创建最终栈。