Pagini recente » Cod sursa (job #3233417) | Cod sursa (job #1496685) | Cod sursa (job #3163591) | Cod sursa (job #1380549) | Cod sursa (job #121624)
Cod sursa(job #121624)
#include<stdio.h>
long int nv,dv[20],xv[20],yv[20],cod,nn,xn[20],yn[20],i,di[20],j,dia,
de[20][20],sol[17][131072],p2[20],vizmax,viz0,n0,n1,v0[20],v1[20],j1,k1,viz1,
j0,soll;
int main()
{
FILE *f,*g;f=fopen("bibel.in","r");g=fopen("bibel.out","w");
p2[0]=1;for(i=1;i<20;i++)p2[i]=2*p2[i-1];
nv=1;dv[0]=0;xv[0]=0;yv[0]=0;
do
{ fscanf(f,"%ld",&cod);
if(cod==0){fscanf(f,"%ld%ld",&xn[nn],&yn[nn]);nn++;}
else
if(cod==1)
{ for(i=0;i<nn;i++)
{ di[i]=dv[0]+(xv[0]-xn[i])*(xv[0]-xn[i])+(yv[0]-yn[i])*(yv[0]-yn[i]);
for(j=1;j<nv;j++)
{ dia=dv[j]+(xv[j]-xn[i])*(xv[j]-xn[i])+(yv[j]-yn[i])*(yv[j]-yn[i]);
if(di[i]>dia)di[i]=dia;
}
}
if(nn==1)
{dv[0]=di[0];xv[0]=xn[0];yv[0]=yn[0];nv=1;nn=0;soll=dv[0];
fprintf(g,"%ld\n",soll);
}
else
{for(i=0;i<nn-1;i++)
{ for(j=i+1;j<nn;j++)
{ de[i][j]=(xn[j]-xn[i])*(xn[j]-xn[i])+(yn[j]-yn[i])*(yn[j]-yn[i]);
de[j][i]=de[i][j];
}
}
for(i=0;i<nn;i++)
sol[i][p2[i]]=di[i];
vizmax=p2[nn]-1;
for(viz0=1;viz0<vizmax;viz0++)
{ n0=0;n1=0;
for(j=0;j<nn;j++)
{ if(p2[j]&viz0){n0++;v0[n0]=j;}
else {n1++;v1[n1]=j;}
}
for(j1=1;j1<=n1;j1++)
{ k1=v1[j1];viz1=viz0+p2[k1];
sol[k1][viz1]=sol[v0[1]][viz0]+de[k1][v0[1]];
for(j0=2;j0<=n0;j0++)
{ soll=sol[v0[j0]][viz0]+de[k1][v0[j0]];
if(soll<sol[k1][viz1])sol[k1][viz1]=soll;
}
}
}
soll=sol[0][vizmax];dv[0]=sol[0][vizmax];xv[0]=xn[0];yv[0]=yn[0];
for(i=1;i<nn;i++)
{ dv[i]=sol[i][vizmax];xv[i]=xn[i];yv[i]=yn[i];
if(dv[i]<soll)soll=dv[i];
}
nv=nn;nn=0;
fprintf(g,"%ld\n",soll);
}
}
}while(cod!=2);
fprintf(g,"\n");
fcloseall();
return 0;
}