Cod sursa(job #287888)

Utilizator ZillaMathe Bogdan Zilla Data 25 martie 2009 12:08:07
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <stdio.h>

#define Nmax 50001

struct nod{
    int info;
    nod *next;
};

nod *p[Nmax];
nod *list;

int n,m,viz[Nmax];

void adauga(int,int),sorteaza(),adl(int),DF(int);

int main()
{
    freopen("sortaret.in","r",stdin);
    freopen("sortaret.out","w",stdout);
    
    int i,x,y;

    scanf("%d%d",&n,&m);
    for(;m>=1;--m)
        {
            scanf("%d%d",&x,&y);
            adauga(x,y);
        }
    sorteaza();
    nod *current=list;
    for(;current;current=current->next)
        printf("%d ",current->info);
    return 0;    
}


void adauga(int i,int k)
{
    nod *current=new nod;
    current->info=k;
    current->next=p[i];
    p[i]=current;
}

void sorteaza()
{
    int i;
    for(i=1;i<=n;++i)
        if(viz[i]==0)
            DF(i);    
}

void adl(int i)
{
    nod *current=new nod;
    current->info=i;
    current->next=list;
    list=current;    
}

void DF(int i)
{
    viz[i]=1;
    nod *current=p[i];
    for(;current;current=current->next)
        if(viz[current->info]==0)
            DF(current->info);
    adl(i);    
}