PersonalCorpus 版 (精华区)

40248 2002-10-09 21:26:39 Accepted
1203 C++ 00:00.01 480K Big Guava


double dl[100][100];
bool used[100];
bool v[100][100];

double func3(int n)
{
    int i,j,k,best_j,best_k;
    double best,res=0;

    for (i=1;i<n;i++) {
        best=100000000;
        for (j=0;j<n;j++) if (used[j])
            for (k=1;k<n;k++) if (!used[k])
                if (best>dl[j][k]) {
                    best=dl[j][k];
                    best_j=j;
                    best_k=k;
                }
        used[best_k]=true;
        v[best_j][best_k]=true;
        v[best_k][best_j]=true;
        res+=best;
    }
    return res;
}


int main()
{
#ifndef ONLINE_JUDGE
    freopen("c:\\0acm\\zju\\i1203","r",stdin);
    freopen("c:\\0acm\\zju\\o1203","w",stdout);
#endif

    int i,j,k,n,t=0;
    double p[100][2];

    while (1) {
        scanf("%d\n",&n);
        if (n==0) break; else t++;
        if (t>1) printf("\n");
        for (i=0;i<n;i++) scanf("%lf%lf\n",&p[i][0],&p[i][1]);
        for (i=0;i<n;i++) for (j=i;j<n;j++) {
                dl[i][j]=sqrt((p[i][0]-p[j][0])*(p[i][0]-p[j][0])+
                                (p[i][1]-p[j][1])*(p[i][1]-p[j][1]));
                dl[j][i]=dl[i][j];
        }
        memset(used,0,sizeof(used));
        memset(v,0,sizeof(v));
        used[0]=true;

        printf("Case #%d:\n",t);
        printf("The minimal distance is: %.2lf\n",func3(n));
    }
}
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.114毫秒