求有向图强连通分量的几种方法

kosaraju算法   翻转图G,两次深搜,遍历连接,后历入栈;

任意有向图G,对其边方向翻转产生图GREV,对于G任意节点开始进行DFS,先遍历后节点入栈S,

DFS(vertex v)

{

  DFS(V->NEXT);

  PUSH V IN S;

}

直至所有节点入栈后将栈顶元素推出作为起点,对GREV进行DFS,先出栈再遍历节点,

DFS(vertex v)

{

  POP V OUT S;

DFS(V->NEXT);

}

每深度遍历一个节点SCC规模加1,一个SCC形成及遍历到路径末时重新选取栈顶元素进行遍历,重复过程直至栈空。

1->2     

2->8   

3->2

3->4

4->9

4->5

5->7

7->6

7->9

7->1

8->1

9->8

9->6

从1开始DFS,1->2->8,则栈S数据为【1,2,8】(右边为栈底)

从非栈中顶点例如3开始DFS,3->4->9->6,则栈S数据为【3,4,9,6,1,2,8】

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值