• Problem B: 最小生成树模板题


    Problem B: 最小生成树模板题

    Problem B: 最小生成树模板题

    Time Limit: 1 Sec  Memory Limit: 128 MB
    [Submit][Status][Web Board]

    Description

    给出一个数字N,代表有N个点,然后给出这N个点的坐标。求一个最小生成树将这N个点连通起来。 这里两点间的距离为欧几里德距离

    Input

    整个测试有多组数据
    对于每组数据
    第一行给出数字N,N<=1000
    接下来N行给点的坐标x,y.-10000 <= X,Y <= 10000
    整个测试以0代表结束

    Output

    输出见样例

    Sample Input

    5
    0 0
    0 1
    1 1
    1 0
    0.5 0.5
    0

    Sample Output

    Case #1:
    The minimal distance is: 2.83

    HINT

    Code

    #include<bits/stdc++.h>
    using namespace std;
    int ans,n;
    float g[101][101];
    struct bobo {
        float a,b;
    } last[101];
    float sqr(float a) {
        return a*a;
    }
    void mst() {
        float lost[101],min,s=0;
        int mini;
        bool b[101];
        memset(b,1,sizeof(b));
        for(int i=2; i<=n; i++)
            lost[i]=100000000;
        lost[1]=0;
        while(1) {
            min=100000000;
            for(int i=1; i<=n; i++)
                if(b[i]&&lost[i]<min) {
                    min=lost[i];
                    mini=i;
                }
            if(min==100000000)
                break;
            b[mini]=false;
            s+=min;
            for(int i=1; i<=n; i++)
                if(b[i]&&g[mini][i]<lost[i])
                    lost[i]=g[mini][i];
        }
        printf("%.2f
    ",s);
    }
    int main() {
        while(cin>>n) {
            if(n==0)
                return 0;
            if(ans>0)
                cout<<endl;
            ans++;
            for(int i=1; i<=n; i++)
                cin>>last[i].a>>last[i].b;
            for(int i=1; i<=n-1; i++)
                for(int j=i+1; j<=n; j++) {
                    g[i][j]=sqrt(sqr((last[i].a-last[j].a))+sqr((last[i].b-last[j].b)));
                    g[j][i]=g[i][j];
                }
            cout<<"Case #"<<ans<<":"<<endl;
            cout<<"The minimal distance is: ";
            mst();
        }
        return 0;
    }
    

    About



  • 相关阅读:
    sql面试题
    C#基础(1)
    Java中的冒泡排序(减少比较次数)
    Java中面向对象的分拣存储
    Java中分拣存储的demo
    XML序列化
    C#读取csv文件使用字符串拼接成XML
    Java中HashMap(泛型嵌套)的遍历
    Java 中List 集合索引遍历与迭代器遍历
    java 中的try catch在文件相关操作的使用
  • 原文地址:https://www.cnblogs.com/ZhaoChongyan/p/11740403.html
Copyright © 2020-2023  润新知