[图] 3.2 有向图的强连通分量-DFS

问题

求【有向图】的【强连通分量】

【强连通分量】非强连通图有向图 的 极大强连通子图

算法

使用【DFS】

步骤一

思路

  1. 有向图G上,从某个顶点出发沿以【该顶点】为【尾的弧】进行DFS
  2. 并按其【所有邻接点】的【搜索都完成(即退出DFS函数)】的顺序将顶点排列起来

实现

对DFS做以下修改

  1. 在进入DFSTraverse时首先进行计算变量的初始化,即【在入口处机上count=0】
  2. 在退出DFS函数之前将完成搜索的顶点号记录在另一个辅助数组finished[vexnum]中,即【在DFS函数结束之前加上finished[++count]=v的语句】

步骤二

思路

  1. 在有向图G上,从最后完成搜索的顶点(即finished[vexnum-1])出发,沿着以该顶点为头的弧作逆向的DFS

  2. 若此次遍历不能访问到有向图中所有顶点:
        从余下的顶点中最后完成搜索的那个顶点出发,继续做【逆向的DFS】

  3. 依次类推,直至有向图中所有顶点都被访问到为止

实现

此时调用DFSTraverse时需要做以下修改:

函数中第二个循环语句的边界条件应改为:v从finished[vexnum-1]至finished[0]


以上,每一次调用DFS作【逆向DFS】所访问到的顶点集便是有向图G中一个【强连通分量的顶点集】

猜你喜欢

转载自blog.csdn.net/summer_dew/article/details/81666877
今日推荐