Cod sursa(job #148054)

Utilizator cnatlLaurian cnatl Data 3 martie 2008 21:02:32
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<stdio.h>
struct nod{ long int inf; nod *next;};
nod *lv[100],*prim,*ultim,*p,*pr;
long int n,m,i,x,y,grin[100];
void punev(long int a, long int b);
void punec(nod* &prim, nod* &ultim, long int aa);
int main()
{   FILE *f=fopen("sortaret.in","r"),
         *g=fopen("sortaret.out","w");
    fscanf(f,"%ld%ld",&n,&m);
    for(i=1;i<=m;i++)
    {  fscanf(f,"%ld%ld",&x,&y);
       punev(x,y); grin[y]++;
    }
    pr=prim;
    for(i=1;i<=n;i++) if(grin[i]==0) punec(prim,ultim,i);
    while(prim)
    {  p=lv[prim->inf];
       while(p) { grin[p->inf]--;
                  if(!grin[p->inf]) punec(prim, ultim,p->inf);
                  p=p->next;
                  }
       prim=prim->next;
    }
    while(pr) { fprintf(g,"%ld ",pr->inf); pr=pr->next;}
    fcloseall();
    return 0;
}
void punev(long int a, long int b)
{    nod *q;
     q=new nod;
     q->inf=b;
     if(!lv[a]){ q->next=0; lv[a]=q;return;}
     q->next=lv[a];
     lv[a]=q;
}
void punec(nod* &prim, nod* &ultim, long int aa)
{    nod *q;
     q=new nod;
     q->inf=aa;
     q->next=0;
     if(!prim){prim=ultim=q;return;}
     ultim->next=q;
     ultim=q;
}