图论 强连通 Kosaraju

Kosaraju:

执行过程:在有向图G中,从A进行一次DFS(From A To B),然后再对GT(G的逆向图)进行一次DFS(From A To B),如果两次DFS都成功,则说明两次DFS所重复经过的点,都在同一个强连通分量上。


  1. void DFS1( int s )  
  2. {  
  3.     int i;  
  4.     visited[s] = true;  
  5.     for( i = head[s] ; i != -1 ; i = edg[i].next )  
  6.     {  
  7.         if( !visited[edg[i].to] )  
  8.         { DFS1( edg[i].to ); }  
  9.     }  
  10.     sta.push( s );  
  11. }  
  12. void DFS2( int s )  
  13. {  
  14.     int i;  
  15.     visited[s] = true;  
  16.     fam[s] = cnt;  
  17.     for( i = nhead[s] ; i != -1 ; i = nedg[i].next )  
  18.     {  
  19.         if( !visited[nedg[i].to] )  
  20.         { DFS2( nedg[i].to ); }  
  21.     }  
  22. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值