图的连通性:强连通-Tarjan算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的连通性:强连通-Tarjan算法相关的知识,希望对你有一定的参考价值。
不早了,先上个模板,做些题再来分析一下;
强连通Tarjan算法+前向星 模板如下:
const int MAXN=110; const int MAXM=10010; struct edge { int to,next; }; edge E[MAXN]; int head[MAXN],Ecou; int Stack[MAXN],top; int Belong[MAXN],lfcou; int Index; int DFN[MAXN],LOW[MAXN]; bool inStack[MAXN]; void Tarjan(int u) { int v; LOW[u]=DFN[u]=++Index; Stack[top++]=u; inStack[u]=1; for(int i=head[u];i!=-1;i=E[i].next) { v=E[i].to; if(!DFN[v]) { Tarjan(v); if(LOW[u]>LOW[v]) LOW[u]=LOW[v]; } else if(inStack[v]&&LOW[u]>DFN[v]) LOW[u]=DFN[v]; } if(LOW[u]==DFN[u]) { ++lfcou; do { v=Stack[--top]; inStack[v]=0; Belong[v]=lfcou; }while(v!=u) } } void getSCC(int n) { for(int i=1;i<=n;i++) if(!DFN[i]) Tarjan(i); } void add_edge(int u,int v) { E[Ecou].to=v; E[Ecou].next=head[u]; head[u]=Ecou++; } void init(int n) { Ecou=Index=lfcou=top=0; for(int i=1;i<=n;i++) { inStack[i]=DFN[i]=0; head[i]=-1; } }
以上是关于图的连通性:强连通-Tarjan算法的主要内容,如果未能解决你的问题,请参考以下文章