• HDU 4463 Outlets 2012年亚洲区域赛杭州赛区现场赛K题


    解题报告:

    题目大意:在一座城市,一共有N家店,其中有一家苹果店和一家耐克店,现在要在这些店之间线路,要使所有的店都联通,并规定苹果店和耐克店之间必须有一条直接的线路,

    求要修建的路的总长度最小是多少?

    最小生成树题,感觉这题用普莱姆算法比较好,先把苹果店和耐克店初始化到一个集合里面去,接下来就是纯最小生成树了。

     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<string.h>
     4 int visit[110],N,p,q;
     5 double map[110][110],local[110][2],sum;
     6 double len(double x1,double y1,double x2,double y2)  {
     7     return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
     8 }
     9 int main() {
    10     int th=1;
    11     while(scanf("%d",&N)&&N!=0) {
    12         scanf("%d%d",&p,&q);
    13         sum=0;
    14         for(int i=1;i<=N;++i)
    15         scanf("%lf%lf",&local[i][0],&local[i][1]);
    16         for(int i=1;i<=N;++i)
    17         for(int j=1;j<=N;++j)
    18         map[i][j]=len(local[i][0],local[i][1],local[j][0],local[j][1]);
    19         memset(visit,0,sizeof(visit));
    20         visit[p]=visit[q]=1;
    21         sum+=map[p][q];
    22         for(int i=2;i<N;++i) {
    23             double min=999999;
    24             int local1,local2;
    25             for(int j=1;j<=N;++j)
    26             if(visit[j]==0) {
    27             for(int k=1;k<=N;++k)
    28                 if(visit[k]==1&&map[j][k]<min) {
    29                     min=map[j][k];
    30                     local1=j;
    31                     local2=k;
    32                 }
    33             }
    34             visit[local1]=visit[local2]=1;
    35             sum+=map[local1][local2];
    36         }
    37         printf("%.2lf\n",sum);
    38     }
    39     return 0;
    40 }
    View Code
  • 相关阅读:
    更新内容
    小书匠预览操作说明
    小书匠预览操作说明
    2017-4-24(1493037086057未命名文件 测试资源是否正确上传
    ASDASASD
    2017-4-24(1493037086057未命名文件 测试资源是否正确上传
    HttpCanary使用指南——静态注入器
    HttpCanary实战教程
    TC软件分析笔记
    飘零金盾8.5本地笔记
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3104253.html
Copyright © 2020-2023  润新知