#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX 20
double table[MAX+1][MAX+1],lowcost[MAX+1],result;
int nearvex[MAX+1],city;
struct coordinate
{
double x;
double y;
}p[MAX+1];
struct Rec
{
int from;
int to;
double cost;
}rec[MAX+1];
inline double dis(double a,double b,double c,double d)
{
return sqrt((a-c)*(a-c)+(b-d)*(b-d));
}
void init()
{
int i,j;
for(i=1;i<=city;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
for(i=1;i<=city;i++)
for(j=1;j<=city;j++)
table[i][j]=dis(p[i].x,p[i].y,p[j].x,p[j].y);
}
void Prim()
{
int i,j,t=1;
result=0;
nearvex[1]=-1;
for(i=2;i<=city;i++)
{
lowcost[i]=table[i][1];
nearvex[i]=1;
}
for(i=2;i<=city;i++)
{
int pmin=0;
double min=999999;
for(j=1;j<=city;j++)
{
if( nearvex[j]!=-1 && lowcost[j]<min)
{
min=lowcost[j];
pmin=j;
}
}
if(pmin)
{
rec[t].from=pmin;
rec[t].to=nearvex[pmin];
rec[t++].cost=min;
result+=min;
nearvex[pmin]=-1;
for(j=1;j<=city;j++)
{
if(nearvex[j]!=-1 && table[j][pmin]<lowcost[j])
{
lowcost[j]=table[j][pmin];
nearvex[j]=pmin;
}
}
}
}
}
int main()
{
while(1)
{
scanf("%d",&city);
if(!city) break;
init();
Prim();
printf("%.3lf\n",result);
}
return 0;
}
TOJ 1411 ---> ZOJ 1914
ZOJ 1372
ZOJ 1406
ZOJ 1586
ZOJ 1203
大家在本周内写完这几个程序即可。。。不懂的问一下!!~


