/*Swordfish 最小生成树
2008-09-02 22:01:43 Accepted 1203 C++ 00:00.01 924K 天将降大任于我
求出每两点的距离,即作为两点的权值
*/
#include<iostream>
#include<cmath>
using namespace std;
const int N=100;
double s[N+1][N+1]; bool check[N+1];
struct node
{
double x,y;
}a[N+1];
double fun(double x1,double y1,double x2,double y2 )
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main()
{
int n,t=0,i,j,k,d; double r,sum,Min;
while(scanf("%d",&n)!=EOF&&n)
{ t++;
if(t!=1) printf("\n");
memset(check,0,sizeof(check));
for(i=0;i<n;i++) scanf("%lf%lf",&a[i].x,&a[i].y);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{ r=fun(a[i].x,a[i].y,a[j].x,a[j].y);
s[i][j]=r;
}
check[0]=1;sum=0; //最小生成树算法
for(k=0;k<n-1;k++)
{
Min=40000;
for(i=0;i<n;i++)
if(check[i])
for(j=0;j<n;j++)
if(!check[j]&&s[i][j]<Min)
{ Min=s[i][j]; d=j;
}
sum+=Min;check[d]=1;
}
printf("Case #%d:\n",t);
printf("The minimal distance is: %.2lf\n",sum);
}
return 0;
}
心难泰,世风坏,旧时正气今何在?正义寡,人情薄,闻道虽多,茅塞不开。怪!怪!怪!
空等待,几多载,冲出重围人心快!暴雨打,狂风袭,任他折磨,此志难改。耐!耐!耐!