tarjan

求强连通分量个数

View Code
void tarjan(int u)

{

    dfn[u]=low[u]=++idx ;

    vis[u]=1 ;

    st[++tp]=u ;

    int v ;

    for(int i=head[u];i;i=e[i].next)

    {

        v=e[i].t ;

        if(!dfn[v])

        {

            tarjan(v) ;

            low[u]=min(low[u],low[v]) ;

        }

        else if(vis[v])

            low[u]=min(low[u],dfn[v]) ;

    }

    if(dfn[u]==low[u])

    {

        ans++ ;

        while(1)

        {

            v=st[tp--] ;

            vis[v]=0 ;

            belong[v]=ans ;

            if(u==v)

                break ;

        }

    }

}

 

 

 

你可能感兴趣的:(tar)