Cod sursa(job #153079)

Utilizator rethosPaicu Alexandru rethos Data 10 martie 2008 09:00:14
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>
#define NM 50001
struct lista
	{int inf;lista *urm;} *G[NM];
int n,m,viz[NM],v[NM],k;
void intr(int x,int y)
{ lista *p=new lista;
  p->inf=y;
  p->urm=G[x];
  G[x]=p;
}
void df(int x)
{ lista *p;
  if (G[x]!=NULL)
	{ for (p=G[x];p->urm;p=p->urm)
	  if (viz[p->inf]==0)
		{ viz[p->inf]=1;
		  v[++k]=p->inf;
		  df(p->inf);
		}
	}
}
int main()
{ freopen("sortaret.in","rt",stdin);
  freopen("sortaret.out","wt",stdout);
  scanf("%d %d",&n,&m);
  int i,x,y;
  for (i=1;i<=m;i++)
	{ scanf("%d %d",&x,&y);
	  intr(x,y);
	}
  for (x=1;x<=n;x++)
	if (!viz[x])
	{ viz[x]=1;
	  v[++k]=x;
	  df(x);
	}
  for (i=1;i<=n;i++) printf("%d ",v[i]);
  fclose(stdin);
  fclose(stdout);
  return 0;
}