Cod sursa(job #1846977)

Utilizator mateialexandru25Matei Alexandru mateialexandru25 Data 14 ianuarie 2017 10:53:37
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#define nmax 50001
#define mmax 100001

using namespace std;
FILE *f=fopen("sortaret.in","r");
FILE *g=fopen("sortaret.out","w");

struct nod {int info; nod*urm;};
int n,m;
nod *prim[nmax];
int grint[nmax];
int viz[nmax];


void add(nod*&prim,int x)
{ nod*p=new nod; p->info=x; p->urm=prim; prim=p;}

void Citire()
{ int i,x,y;
  fscanf(f,"%d%d",&n,&m);
  for(i=1;i<=m;i++)
  { fscanf(f,"%d%d",&x,&y);
    add(prim[x],y);
    grint[y]++;
  }
}

void SortareTopologica()
{ int ct=0,i; nod *p;
  while(ct<n)
     for(i=1;i<=n;i++)
       if(grint[i]==0 && viz[i]==0)
         { fprintf(g,"%d ",i); viz[i]=1;
           ct++;
           for(p=prim[i];p;p=p->urm) grint[p->info]--;
         }
}

int main()
{ Citire();
  SortareTopologica();
  return 0;
}