Korasaju
procedure Strongly_Connected_Components(G);
- begin
- 1.深度优先遍历G,算出每个结点u的结束时间f[u],起点如何选择无所谓。
- 2.深度优先遍历G的转置图GT,选择遍历的起点时,按照结点的结束时间从大到小进行。遍历的过程中,一边遍历,一边给结点做分类标记,每找到一个新的起点,分类标记值就加1。
- 3. 第2步中产生的标记值相同的结点构成深度优先森林中的一棵树,也即一个强连通分量
- end;
#include
#include
#include
#include
#include
using namespace std;
const int maxn=10000+10;
bool vis[maxn];
int ID[maxn]; //点的颜色编号
int ncolor;
vector s;
vector > color(maxn); //同一种颜色的点
vector > G(maxn);
vector > GT(maxn);
void dfs(int u){vis[u]=true;for(int i=0;i=0;i--) {int j=s[i];if(!vis[j]) ncolor++,dfs2(j);}
}
int main()
{int n,m;cin>>n>>m;while(m--){int u,v;cin>>u>>v;G[u].push_back(v);GT[v].push_back(u); //转置图 }Korasaju(n);return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
