zoukankan      html  css  js  c++  java
  • tarjan1

    #include<iostream>
    #include<cstring>
    using namespace std;
    struct node
    {
        int v;
        int next;
    }edge[1010];
    int dfn[1010],low[1010],heads[1010];
    int cnt,visit[1010],stack[1010],tot;
    int idx,ans;
    void add(int x,int y)
    {
        edge[++cnt].next=heads[x];
        edge[cnt].v=y;
        heads[x]=cnt;
        return;
    }
    void tarjan(int x)
    {
        dfn[x]=low[x]=++tot;
        stack[++idx]=x;
        visit[x]=1;
        for(int i=heads[x];i!=-1;i=edge[i].next)
        {
            if(dfn[edge[i].v]==0)
            {
                tarjan(edge[i].v);
                low[x]=min(low[x],low[edge[i].v]);
            }
            else if(visit[edge[i].v])
            {
                low[x]=min(low[x],dfn[edge[i].v]);
            }
        }
        if(low[x]==dfn[x])
        {
            do
            {
                cout<<stack[idx];
                visit[stack[idx]]=0;
                idx--;
            }while(x!=stack[idx+1]);
            cout<<endl;
        }
        return;
    }
    int main()
    {
        memset(heads,-1,sizeof(heads));
        int n,m;
        cin>>n>>m;
        int x,y;
        for(int i=1;i<=m;i++)
        {
            cin>>x>>y;
            add(x,y);
        }
        for(int i=1;i<=n;i++)
        {
            if(dfn[i]==0)
            {
                tarjan(i);
            }
        }
        return 0;
    }
  • 相关阅读:
    Java实现2048小游戏
    归并排序【代码】
    插入排序【代码】
    选择排序【代码】
    考试系统
    九九乘法表
    万年历
    猜数游戏
    C++知识点(杂)
    Core Data ,inverse
  • 原文地址:https://www.cnblogs.com/Chri-K/p/13890638.html
Copyright © 2011-2022 走看看