问题
求【有向图】的【强连通分量】
【强连通分量】非强连通图有向图 的 极大强连通子图
算法
使用【DFS】
步骤一
思路
- 有向图G上,从某个顶点出发沿以【该顶点】为【尾的弧】进行DFS
- 并按其【所有邻接点】的【搜索都完成(即退出DFS函数)】的顺序将顶点排列起来
实现
对DFS做以下修改
- 在进入DFSTraverse时首先进行计算变量的初始化,即【在入口处机上count=0】
- 在退出DFS函数之前将完成搜索的顶点号记录在另一个辅助数组finished[vexnum]中,即【在DFS函数结束之前加上finished[++count]=v的语句】
步骤二
思路
在有向图G上,从最后完成搜索的顶点(即finished[vexnum-1])出发,沿着以该顶点为头的弧作逆向的DFS
若此次遍历不能访问到有向图中所有顶点:
从余下的顶点中最后完成搜索的那个顶点出发,继续做【逆向的DFS】依次类推,直至有向图中所有顶点都被访问到为止
实现
此时调用DFSTraverse时需要做以下修改:
函数中第二个循环语句的边界条件应改为:v从finished[vexnum-1]至finished[0]
以上,每一次调用DFS作【逆向DFS】所访问到的顶点集便是有向图G中一个【强连通分量的顶点集】