Pagini recente » Cod sursa (job #2710594) | Cod sursa (job #689572) | Cod sursa (job #1600081) | Cod sursa (job #780311) | Cod sursa (job #1024179)
#include<stdio.h>
#include<math.h>
#include<string.h>
#define eps 1.e-14
#define INF 2000000000.
double dist[22][22],d[1<<16];
int x[20],y[20];
char aux[22];
inline double min(double a,double b)
{return a<b?a:b;}
int main()
{
//freopen("date.in","r",stdin);
//freopen("date.out","w",stdout);
int n,i,j,max,p1,p2,t=0;
while(1)
{
scanf("%d\n",&n);
if(n==0)
break;
++t;
max=2*n;
for(i=0;i<max;++i)
scanf("%s%d%d\n",&aux,&x[i],&y[i]);
for(i=0;i<max;++i)
for(j=i+1;j<max;++j)
dist[i][j]=dist[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]) );
int ns=(1<<(2*n));
for(i=1;i<ns;++i)
{
d[i]=INF;
for(p1=0;p1<max;++p1)
for(p2=p1+1;p2<max;++p2)
if((i&(1<<p1)) && (i&(1<<p2)))
{
j=i^(1<<p1)^(1<<p2);
d[i]=min(d[i],d[j]+dist[p1][p2]);
}
}
printf("Case %d: %.2lf\n",t,d[ns-1]);
}
return 0;
}