Pagini recente » Cod sursa (job #128290) | Cod sursa (job #683920) | Cod sursa (job #2528855) | Cod sursa (job #1500114) | Cod sursa (job #528014)
Cod sursa(job #528014)
#include <stdio.h>
#define maxn 1<<21
struct nrt{
int x,y;
};
int pit(nrt a,nrt b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
};
int p1,cont[2],a,b,d[18][18],sll[maxn][17],dpr[18][18],dpp[18],i,j;
nrt v[2][17];
int main()
{
freopen("bibel.in","r",stdin);
freopen("bibel.out","w",stdout);
scanf("%d",&p1);
cont[1]=1;
v[1][0].x=0;
v[1][0].y=0;
int ind=0;
while(p1!=2){
if(p1==0){
cont[ind]++;
scanf("%d%d",&v[ind][cont[ind]].x,&v[ind][cont[ind]].y);
}
if(p1==1){
for(i=0;i<(1<<cont[ind]);i++){
for(j=0;j<cont[ind];j++){
sll[i][j]=maxn;
}
}
for(i=0;i<cont[ind];i++){
for(j=i;j<cont[ind];j++){
dpr[i][j]=pit(v[ind][i],v[ind][j]);
dpr[j][i]=dpr[i][j];
}
}
for(i=0;i<cont[ind];i++){
for(j=0;j<cont[ind^1];j++){
if(dpp[j]+pit(v[ind][i],v[ind^1][j])<sll[1<<i][i]){
sll[1<<i][i]=dpp[j]+pit(v[ind][i],v[ind^1][j]);
}
}
}
for(i=0;i<(1<<cont[ind]);i++){
for(j=0;j<cont[ind];j++){
if((1<<j)&i){
for(int k=0;k<cont[i];k++){
if((1<<k)&i){
if(sll[i][j]+dpr[k][j]<sll[i^(1<<k)][k]){
sll[i^(1<<k)][k]=sll[i][j]+dpr[k][j];
}
}
}
}
}
}
int sol=maxn;
for(i=0;i<cont[ind];i++){
dpp[i]=sll[(1<<cont[ind])-1][i];
if(sol>sll[(1<<cont[ind])-1][i]){
sol=sll[(1<<cont[ind])-1][i];
}
}
printf("%d\n",sol);
ind=ind^1;
cont[ind]=0;
}
if(p1!=2){
scanf("%d",&p1);
}
}
return 0;
}