无向图和有向图的tarjan


// 有向图tarjan 
void tarjan(int u)  
{  
    int j,v;  
    dfn[u]=low[u]=cnt++;  
    vis[u]=1;  
    S.push(u);  
    for(j=head[u];j!=-1;j=edge[j].next)  
    {  
        v=edge[j].to;  
        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])  
    {  
        count++;  
        do{  
            v=S.top();  
            S.pop();  
            vis[v]=0;  
        }while(v!=u);  
    }  
}  


//无向图tarjan 
void tarjan(int u,int fa )  
{  
    int j,v;  
    dfn[u]=low[u]=cnt++;  
    vis[u]=1;  
    S.push(u);  
    for(j=head[u];j!=-1;j=edge[j].next)  
    {  
        v=edge[j].to;  
        if(!dfn[v])  
        {  
            tarjan(v,u);  
            low[u]=min(low[u],low[v]);  
        }  
        else if(vis[v] && v!=fa)   
            low[u]=min(low[u],dfn[v]);   
    }  
    if(dfn[u]==low[u])  
    {  
        count++;  
        do{  
            v=S.top();  
            S.pop();  
            vis[v]=0;  
        }while(v!=u);  
    }  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值