Pagini recente » Cod sursa (job #186712) | Cod sursa (job #516690) | Cod sursa (job #2018870) | Cod sursa (job #1723914) | Cod sursa (job #516432)
Cod sursa(job #516432)
#include<stdio.h>
#include<stdlib.h>
#define NR 50001
typedef struct nod
{long info;
struct nod *next;}Nod;
typedef Nod *list;
list l[NR];
typedef struct
{long st[NR],sp;}stiva;
long n,i,j,k,m,c[NR];
stiva s;
void push(stiva &s,long x)
{s.st[++s.sp]=x;}
long pop(stiva &s)
{return s.st[s.sp--];}
void add(list &l,long x)
{Nod *nou=new Nod;
nou->info=x;
nou->next=l;
l=nou;}
int apartine(list l,long x)
{list d;
for(d=l;d!=NULL;d=d->next)
if(d->info==x)
return 1;
return 0;}
long del(list &l)
{Nod *aux=l->next;
long x=l->info;
free(l);
l=aux;
return x;}
void explorare(long i)
{long j;
c[i]=1;
for(j=n;j>=1;j--)
if(c[j]==0&&apartine(l[i],j)==1)
explorare(j);
push(s,i);}
int main()
{freopen("sortaret.in","r",stdin);
freopen("sortaret.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(i=1;i<=n;i++)
{c[i]=0;
l[i]=NULL;}
for(k=1;k<=m;k++)
{scanf("%ld%ld",&i,&j);
if(apartine(l[i],j)==0)
add(l[i],j);}
s.sp=0;
for(i=1;i<=n;i++)
if(c[i]==0)
explorare(i);
while(s.sp!=0)
printf("%ld ",pop(s));
fclose(stdin);
fclose(stdout);
return 0;}