首页 > 编程语言 > 详细

【拓扑 && 模板】Kosaraju算法

时间:2018-05-22 19:00:16      阅读:239      评论:0      收藏:0      [点我收藏+]
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1000;
 4 vector <int> g1[maxn],g2[maxn];
 5 stack <int> s;
 6 int vis[maxn],sccno[maxn],cnt;
 7 void dfs1(int u){
 8     if(vis[u]) return ;
 9     vis[u]=1;
10     for(int i=0;i<g1[u].size();i++)
11         dfs1(g1[u][i]);
12     s.push(u);
13 }
14 
15 void dfs2(int u){
16     if(sccno[u]) return ;
17     sccno[u]=cnt;
18     for(int i=0;i<=g2[u].size();i++)
19         dfs2(g2[u][i]);
20 }
21 
22 void KK(int n){
23     cnt=0;
24     while (!s.empty()) s.pop();
25     memset(sccno,0, sizeof(sccno));
26     memset(vis,  0, sizeof(vis));
27     for(int i=0;i<n;i++){
28         dfs1(i);
29     }
30     while(!s.empty()){
31         if(!sccno[s.top()]){
32             cnt++;
33             dfs2(s.top());
34         }
35         s.pop();
36     }
37 }
38 int main(){
39     
40     return 0;
41 }

 

【拓扑 && 模板】Kosaraju算法

原文:https://www.cnblogs.com/luv-letters/p/9073490.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!