图——强连通分量

强连通分量(strongly connected component, SGG)

是满足如下条件的结点的子集𝑆, 𝑆 ∈ 𝑉
        对于任意两个结点𝑢, 𝑣 ∈ 𝑆,都有
               从𝑢出发到𝑣的路径;
               从𝑣出发到𝑢的路径;
       𝑆是最大的(maximal),添加任何一个结点进去,上述条件都不再满足

问题描述:
给定一个有向图,𝐺 = 𝑉, 𝐸 ,将所有结点V划分成不相交的子集,使得每个子集都是强连通分量。

步骤1:获取反向图G^{R}——将图G中所有边的方向进行反向

步骤2:通过深度优先算法DFS,获取序列L^{R}——遍历过程中结点变黑的顺序

步骤3:获取逆序序列L——将遍历序列L^{R}反向

步骤4:在原图G上,进行深度优先遍历:

            遍历规则1:从序列L的第一个结点进行深度遍历

            遍历规则2:开始遍历一个新连通分量时,从L中选择颜色仍为white的结点开始

SCC(G)
Input: A directed graph G
Output: The set of strongly connected components R
𝑅 ← {}; //set of SCCs
𝐺R ←reverse graph of G;
𝐿R ←DFS(𝐺R); //Perform DFS
𝐿 ←reverse order of 𝐿R;
for 𝑢 ∈ 𝐿 do
    if 𝑐𝑜𝑙𝑜𝑟 𝑢 𝑖𝑠 𝑒𝑞𝑢𝑎𝑙 𝑡𝑜 𝑊𝐻𝐼𝑇𝐸 then
        𝐿𝑠𝑐𝑐 ←DFSVisit(G,u); //Perform DFS starting at u
        𝑅 ← R ∪ Set(𝐿𝑠𝑐𝑐);
    end
end
return 𝑅;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值