• HDU4463(最小生成树)


    模版稍微改一下,Prime在搜到其中一个点时直接把另一条边加入即可。

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #define LEN 110
     6 #define INF 0x7fffffff
     7 using namespace std;
     8 
     9 int n;
    10 typedef struct {
    11     int x, y;
    12 }POINT;
    13 
    14 POINT store[LEN];
    15 int ta, tb;
    16 double map[LEN][LEN], dis[LEN];
    17 int vis[LEN];
    18 
    19 double prime(int vex)
    20 {
    21     double sum = 0;
    22     memset(vis, 0, sizeof vis);
    23     memset(dis, 0, sizeof dis);
    24     vis[0]=1;
    25     for(int i=0; i<n; i++)
    26         dis[i] = map[vex][i];
    27     for(int i=0; i<n-1; i++)
    28     {
    29         int min;
    30         double minsize = INF;
    31         if(vis[ta]+vis[tb]==1){
    32             minsize = map[ta][tb];
    33             min = ((i==ta)?tb:ta);
    34             vis[min] = 1;
    35             sum += minsize;
    36             for(int j=0; j<n; j++)
    37                 if(map[min][j]<dis[j])
    38                     dis[j] = map[min][j];
    39         }
    40         else{
    41             for(int j=0; j<n; j++){
    42                 if(minsize>dis[j] && vis[j]==0){
    43                     min = j;
    44                     minsize = dis[j];
    45                 }
    46             }
    47             vis[min] = 1;
    48             sum += minsize;
    49             for(int j=0; j<n; j++)
    50                 if(map[min][j]<dis[j])
    51                     dis[j] = map[min][j];
    52         }
    53     }
    54     return sum;
    55 }
    56 
    57 double Dis(POINT a, POINT b)
    58 {
    59     return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    60 }
    61 
    62 void build()
    63 {
    64     scanf("%d%d", &ta, &tb);
    65     ta--;tb--;
    66     for(int i=0; i<n; i++){
    67         scanf("%d%d", &store[i].x, &store[i].y);
    68     }
    69     for(int i=0; i<n; i++)
    70     for(int j=0; j<n; j++){
    71         map[i][j] = Dis(store[i], store[j]);
    72     }
    73 }
    74 
    75 int main()
    76 {
    77 //    freopen("in.txt", "r", stdin);
    78 
    79     while(scanf("%d", &n)!=EOF && n)
    80     {
    81         build();
    82         printf("%.2lf
    ", prime(0));
    83     }
    84     return 0;
    85 }
    View Code
    奔跑吧!少年!趁着你还年轻
  • 相关阅读:
    Javascript的作用域、作用域链以及闭包
    C#当中的泛型和java中的对比
    MongoDB的主从复制和副本集
    MongoDB启动配置等
    JavaScript学习系列1 基础-变量
    Umbraco项目发布错误 --More than one type want to be a model for content type authorize
    项目中gulp使用发生的错误及解决
    JavaScript学习系列2一JavaScript中的变量作用域
    ASP.NET MVC中的ActionFilter介绍学习
    Razor中的 内容标记块语法
  • 原文地址:https://www.cnblogs.com/shu-xiaohao/p/3383784.html
Copyright © 2020-2023  润新知