Cod sursa(job #407634)

Utilizator MariusGeantaMarius Geanta MariusGeanta Data 2 martie 2010 15:13:23
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<stdio.h>
#define Nmax 50001

typedef struct nod { long inf;nod *adr; } *Lista;
Lista l[Nmax];
long n,m;
char viz[Nmax];
Lista po;


void adaugare(long y,Lista &p)
{	Lista x;
	x=new nod;
	x->inf=y;
	x->adr=p;
	p=x;
}

void citire()
{	long i,x,y;
	freopen("sortaret.in","r",stdin);
	scanf("%ld%ld",&n,&m);
	for (i=1;i<=m;i++)
	{	scanf("%ld%ld",&x,&y);
		adaugare(y,l[x]);
	}
}

void adancime(long x)
{	Lista p;
	viz[x]=1;
	for (p=l[x];p;p=p->adr)
		if (!viz[p->inf])
			adancime(p->inf);
	adaugare(x,po);
}

void afisare()
{	Lista p;
	freopen("sortaret.out","w",stdout);
	for (p=po;p;p=p->adr)
		printf("%ld ",p->inf);
}
	
int main()
{	long i;
	citire();
	for (i=1;i<=n;i++)
		if (!viz[i]) adancime(i);
	afisare();
	return 0;
}