Cod sursa(job #514722)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 19 decembrie 2010 14:44:59
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<stdio.h>
#define NR 50001
typedef struct stiva
{int st[NR],sp;};
typedef struct Nod
{long info;
struct Nod *next;}nod,*list;
list l[NR];
long n,i,j,k,m,c[NR]={0};
        
void add(list &l,long x)
{nod *nou=new nod;
nou->info=x;
nou->next=l;
l=nou;}

int apartine(list l,long x)
{list c;
for(c=l;c!=NULL;c=c->next)
if(c->info==x)
         return 1;
return 0;}

void push(stiva &s,long x)
{s.st[++s.sp]=x;}

long pop(stiva &s)
{return s.st[s.sp--];}

void explorare(long *k,long i)
{long j,t;
c[i]=1;
stiva s;
s.sp=0;
push(s,i);
while(s.sp!=0)
        {j=pop(s);
        c[j]=1;
        printf("%ld ",j);
        for(t=n;t>=1;t--)
        if(c[t]==0&&apartine(l[j],t)==1)
                {c[t]=1;
                push(s,t);}}}

int main()
{freopen("sortaret.in","r",stdin);
freopen("sortaret.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(k=1;k<=m;k++)
       {scanf("%ld%ld",&i,&j);
       if(apartine(l[i],j)==0)
                 add(l[i],j);}
k=1;
for(i=1;i<=n;i++)
if(c[i]==0)
       explorare(&k,i);
fclose(stdin);
fclose(stdout);
return 0;}