Pagini recente » Cod sursa (job #2907581) | Cod sursa (job #357674) | Cod sursa (job #2436750) | Cod sursa (job #3194873) | Cod sursa (job #120121)
Cod sursa(job #120121)
#include<stdio.h>
long long int cod,i,sol,
xv[20],yv[20],dv[20],nv,
xn[20],yn[20],dn[20],nn,
xc[20],yc[20],dc[20],
viz[20],bila[20];
void solve(long long int poz);
int main()
{
FILE *f,*g;f=fopen("bibel.in","r");g=fopen("bibel.out","w");
nv=1;xv[1]=0;yv[1]=0;
do
{
fscanf(f,"%lld",&cod);
if(cod==0){nn++;fscanf(f,"%lld%lld",&xn[nn],&yn[nn]);dn[nn]=4000000000;}
else
if(cod==1)
{ for(i=1;i<=nv;i++)
{xc[0]=xv[i];yc[0]=yv[i];dc[0]=dv[i];solve(1);}
sol=dn[1];for(i=1;i<=nn;i++)if(sol>dn[i])sol=dn[i];
for(i=0;i<20;i++)
{xv[i]=xn[i];xn[i]=0;
yv[i]=yn[i];yn[i]=0;
dv[i]=dn[i];dn[i]=0;}
nv=nn;nn=0;
fprintf(g,"%lld\n",sol);
}
}while(cod!=2);
fcloseall();
return 0;
}
void solve(long long int poz)
{ long long int il;
if(poz==nn+1)
{ if(dn[bila[poz-1]]>dc[poz-1])
dn[bila[poz-1]]=dc[poz-1];
return;
}
for(il=1;il<=nn;il++)
{ if(!viz[il])
{ viz[il]=1;
bila[poz]=il;
xc[poz]=xn[il];
yc[poz]=yn[il];
dc[poz]=
dc[poz-1]+
(xc[poz]-xc[poz-1])*(xc[poz]-xc[poz-1])+
(yc[poz]-yc[poz-1])*(yc[poz]-yc[poz-1]);
solve(poz+1);
dc[poz]=0;
yc[poz]=0;
xc[poz]=0;
bila[poz]=0;
viz[il]=0;
}
}
}