Pagini recente » Cod sursa (job #3265355) | Cod sursa (job #2963158) | Cod sursa (job #42277) | Cod sursa (job #1491347) | Cod sursa (job #946559)
Cod sursa(job #946559)
#include<stdio.h>
#define NMAX 5005
int n,v[NMAX],sol;
int a[NMAX],b[NMAX],c[NMAX];
inline void baga(int poz, int val)
{
// printf("A %d-a pozitie sa fie %d\n",poz,val);
int i;
for(i = 1; i <= n; i++)
{
if(!v[i])
poz--;
if(!poz)
{
v[i] = val;
break;
}
}
}
inline void recursiv(int lung, int st, int dr)
{
// printf("%d %d %d\n",lung,st,dr);
sol++;
if(!lung)
return ;
if(lung == 1)
{
baga(1,dr);
return ;
}
if(a[lung] != b[lung] && a[lung] != c[lung] && b[lung] != c[lung])
{
baga(a[lung],st);
if(b[lung] > a[lung])
baga(b[lung] - 1,st + 1);
else
baga(b[lung], st + 1);
recursiv(lung - 2, st + 2, dr);
return ;
}
if(a[lung] == b[lung] || a[lung] == c[lung])
{
baga(a[lung],st);
recursiv(lung - 1, st + 1,dr);
return ;
}
baga(c[lung],st);
recursiv(lung - 1, st + 1,dr);
}
int main ()
{
int i;
freopen("sortare.in","r",stdin);
freopen("sortare.out","w",stdout);
scanf("%d",&n);
for(i = 2; i <= n; i++)
scanf("%d%d%d",&a[i],&b[i],&c[i]);
sol = 0;
recursiv(n,1,n);
printf("%d\n",sol);
for(i = 1; i <= n; i++)
printf("%d ",v[i]);
printf("\n");
return 0;
}