zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    菜鸟浅谈软件开发项目管理
    中国准货币体系的概要简析
    使用dockercompose安装wordpress
    货币乘数
    安全测试的相关内容
    TCP三次握手和四次挥手
    HTTP协议相关
    描述浏览器登录的过程
    AJAX相关知识
    什么是热钱
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3104253.html
Copyright © 2011-2022 走看看