Cod sursa(job #300203)

Utilizator bacerandreiBacer Andrei bacerandrei Data 7 aprilie 2009 11:59:33
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.72 kb
#include <stdio.h>   
struct nod   
{   
    long nr;   
    nod *ua;   
} *l[50010],*lf;   
long i,n,m,t,f;   
char s[50010];   
  
void dfs(int nd)   
{   
    nod *p;   
    s[nd]=1;   
    p=l[nd];   
    while (p)   
    {   
        if (s[p->nr]==0)   
            dfs(p->nr);   
        p=p->ua;   
    }   
    p=new nod;   
    p->nr=nd;   
    p->ua=lf;   
    lf=p;   
}   
  
void clad(int t, int f)   
{   
    nod *p;   
    p=new nod;   
    p->nr=f;   
    p->ua=l[t];   
    l[t]=p;   
}   
  
int main()   
{   
    freopen("sortaret.in","r",stdin);   
    freopen("sortaret.out","w",stdout);   
    scanf("%ld %ld",&n,&m);   
    for (i=1; i<=m; i++)   
    {   
        scanf("%ld %ld",&t,&f);   
        clad(t,f);   
    }   
    for (i=1; i<=n; i++)   
        if (s[i]==0)   
            dfs(i);   
    while (lf)   
    {   
        printf("%ld ",lf->nr);   
        lf=lf->ua;   
    }   
    fclose(stdin);   
    fclose(stdout);   
    return 0;   
}  
#include <stdio.h>
struct nod
{
	long nr;
	nod *ua;
} *l[50010],*lf;
long i,n,m,t,f;
char s[50010];

void dfs(int nd)
{
	nod *p;
	s[nd]=1;
	p=l[nd];
	while (p)
	{
		if (s[p->nr]==0)
			dfs(p->nr);
		p=p->ua;
	}
	p=new nod;
	p->nr=nd;
	p->ua=lf;
	lf=p;
}

void clad(int t, int f)
{
	nod *p;
	p=new nod;
	p->nr=f;
	p->ua=l[t];
	l[t]=p;
}

int main()
{
	freopen("sortaret.in","r",stdin);
	freopen("sortaret.out","w",stdout);
	scanf("%ld %ld",&n,&m);
	for (i=1; i<=m; i++)
	{
		scanf("%ld %ld",&t,&f);
		clad(t,f);
	}
	for (i=1; i<=n; i++)
		if (s[i]==0)
			dfs(i);
	while (lf)
	{
		printf("%ld ",lf->nr);
		lf=lf->ua;
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}