【杭电】[1162]Eddy's picture

来源:互联网 发布:cd设计软件 编辑:程序博客网 时间:2024/06/05 20:31

这里写图片描述

给出n个坐标
问把这n个坐标连接起来需要多少墨水

先记录坐标
然后分别计算坐标与坐标之间的距离

#include<stdio.h>#include<math.h>#include<algorithm>using namespace std;double dis[120];double e[120][120];bool flag[120];int inf=99999999;double ab(double x1,double y1,double x2,double y2) {    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}struct node {    double x,y;} a[120];int main() {    int n;    while(scanf("%d",&n)!=EOF) {        for(int i=1; i<=n; i++) {            dis[i]=inf;            flag[i]=false;        }        for(int i=1; i<=n; i++) {            for(int j=1; j<=n; j++) {                e[i][j]=inf;            }        }        for(int i=1; i<=n; i++) {            scanf("%lf %lf",&a[i].x,&a[i].y);        }        for(int i=1; i<=n; i++) {            for(int j=i; j<=n; j++) {                e[i][j]=e[j][i]=ab(a[i].x,a[i].y,a[j].x,a[j].y);            }        }        double sum=0;        dis[1]=0;        bool x=true;        while(true) {            int v=-1;            for(int u=1; u<=n; u++) {                if(!flag[u]&&(v==-1||dis[u]<dis[v]))                    v=u;            }            if(v==-1)                break;            else {                flag[v]=true;                sum+=dis[v];                for(int u=1; u<=n; u++) {                    dis[u]=min(dis[u],e[v][u]);                }            }        }        printf("%.2lf\n",sum);    }    return 0;}

题目地址:【杭电】[1162]Eddy’s picture

0 0
原创粉丝点击