tarjan强连通算法
标签:ace color init struct std pac top -- ini
#include
#include string.h>
using namespace std;
const int MAX_N=100;
const int MAX_M=10000;
struct edge{
int v,next;
int len;
}E[MAX_M];
int p[MAX_N],eid;
void init(){
memset(p,-1,sizeof(p));
eid=0;
}
void insert(int u,int v){
E[eid].v=v;
E[eid].next=p[u];
p[u]=eid++;
}
void tarjan(int u){
dfn[u]=low[u]=++idx;
s[top++]=u;
in_stack[u]=true;
for(int i=p[u];i+1;i=E[i].next){
int v=E[i].v;
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}else if(in_stack[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u]){
++scc;
do{
belong[s[--top]]=scc;
in_stack[s[top]]=false;
}while(s[top]!=u);
}
}
int main() {
int n,m;
init();
cin>>n>>m;
for(int i=0;i){
int u,v;
cin>>u>>v;
insert(u,v);
}
memset(dfn,0,sizeof(dfn));
idx=0;
for(int i=1;ii){
if(!dfn[i]){
tarjan(i);
}
}
for(int i=1;i){
cout"block "": ";
for(int j=1;j){
if(belong[j]==i){
cout" ";
}
}
coutendl;
}
return 0;
}
tarjan强连通算法
标签:ace color init struct std pac top -- ini
原文地址:https://www.cnblogs.com/asdic/p/9723216.html
评论