Cod sursa(job #148066)

Utilizator the1dragonIonita Alexandru the1dragon Data 3 martie 2008 21:17:39
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>

struct entry
{
	int val;
	entry * adr;
}*start[51200], *stop[51200];

void add(int a, int b)
{
	entry *p;
	p=new entry;
	p->val=b;
	p->adr=NULL;
	if (start[a]==NULL)
		start[a]=stop[a]=p;
	else
	{
		stop[a]->adr=p;
		stop[a]=stop[a]->adr;
	}
	return;
}


int n, m;
char sel [51200];
int sol[51200], count;


void dfs(int nod)
{
	entry *p;
	sel[nod]=1;
	p=start[nod];
	while(p)
	{
		if (!sel[p->val])
			dfs(p->val);
		p=p->adr;
	}
	++count;
	sol[count]=nod;
}

int main()
{
	freopen("sortaret.in", "r", stdin);
	freopen("sortaret.out", "w", stdout);
	
	int i, a, b;
	scanf("%d %d", &n, &m);
	for (i=1; i<=m; i++)
	{
		scanf("%d %d", &a, &b);
		add(a, b);
	}
	for (i=1; i<=n; i++)
		if (!sel[i])
			dfs(i);
	for (i=n; i>=1; i--)
		printf("%d ", sol[i]);
	fclose(stdout);
	return 0;
}