Cod sursa(job #651180)
#include<stdio.h>
struct nod {int nr;
nod *leg;};
nod *a[80];
int n,m,cont[20],c[20],gasit;
void adauga(int i,int j)
{nod *d;
cont[j]++;
d=new nod;
d->nr=j;
d->leg=a[i];
a[i]=d;
}
void actualizare(int x)
{nod *d;
d=a[x]; //adresa cu toti succesorii lui x
while(d!=0)
{cont[d->nr]--;
d=d->leg;}}
int main()
{int i,j,k;
printf("%d", n);
printf("\n");
scanf("%d", &n);
int nr;
for(i=1;i<=n;i++)
{cont[i]=0;
a[i]=0;
}
while(i)
{printf("%d%d", i,j);
printf("\n");
scanf("%d%d", &i, &j);
if(i) adauga(i,j);}
m=n;
do
{k=1;
gasit=0;
for(i=1;i<=n;i++)
if(cont[i]==0)
{gasit=1;
m--;
c[k]=i;
k++;
cont[i]=-1;
}
for(i=1;i<=k-1;i++)
{actualizare(c[i]);
printf("%d", c[i]);
printf("\n");
}}
while(gasit!=0 && n!=0);
{if(m!=0)
printf("relatie contradictorie");
else printf("totul este ok");}
return 0;
}