hdu 1875 畅通工程再续(prim方法求得最小生成树)

简介:

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1875

复制代码
/************************************************************************/
/*     
        hdu  畅通工程再续
        有条件的最小生成树
        题目大意:在这些小岛中建设最小花费的桥,但是一座桥的距离必须在10 -- 1000之间。
*/
/************************************************************************/

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>

#define MAX 0xfffffff

const int N = 101;

typedef struct
{
    int x,y;
}POINT;

POINT p[N];
double map[N][N];
int vis[N];
int T,C,x,y,i,j;

double get_distance(POINT a,POINT b)
{
    return sqrt(pow(a.x-b.x,2.0)+pow(a.y-b.y,2.0));
}

void build_map()
{
    double len;
    for (int t = 0; t < C; t++)
    for (int v = t; v < C; v++)
    {
        len = get_distance(p[t],p[v]);
        if(len>=10 &&len <= 1000)
        map[t][v] = map[v][t] = (t==v)?0:len;
        else map[t][v] = map[v][t] = MAX;
    }
    
}

void prim()
{
    int k,t = C;
    double min,sum = 0;
    memset(vis,0,sizeof(vis));
    vis[0]=1;
    while(--t)
    {
        min = MAX;
        for (i = 1; i < C; i++)
        {
            if (vis[i]!=1 && map[0][i] < min)
            {
                min = map[0][i];
                k = i;
            }
        }
        if (min==MAX)break;
        vis[k] = 1;
        sum += min;
        for (i = 1; i < C; i++)
        {
            if (vis[i]!=1 && map[k][i] < map[0][i] )
            map[0][i] = map[k][i];
        }
    }
    //printf("%d\n",t);
    if(t==0)
    {
        printf("%.1f\n",sum*100);
    }else printf("oh!\n");
}


int main()
{
    while(scanf("%d",&T)!= EOF)
    {
        for (int t = 0; t < T; t++)
        {
            scanf("%d",&C);
            for (int c = 0; c < C; c++)
            scanf("%d%d",&p[c].x,&p[c].y);
            build_map();
            prim();
        }
        
    }
    return 0;
}
复制代码

 










本文转自NewPanderKing51CTO博客,原文链接:http://www.cnblogs.com/newpanderking/p/3250714.html ,如需转载请自行联系原作者


相关文章
|
机器学习/深度学习 人工智能
AI 中的“一般性”
AI 中的“一般性”
|
算法 Python
R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列
R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列
|
存储 编译器 C语言
[C++] 类与对象(上)1
[C++] 类与对象(上)1
|
消息中间件 设计模式 NoSQL
JVM GC耗时频频升高,我来教你排查
多个业务线的应用出现LongGC告警 最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。
JVM GC耗时频频升高,我来教你排查
|
小程序
人人都能做个微信答题小程序
嗨!大家好,我是小蚂蚁。这是一个面向每个人的微信答题小程序教程,只要你有制作答题小程序的需求,就可以根据本教程定制一个自己的微信答题小程序。 这是我制作的一个微信答题小程序的项目,你只需要在其基础上进行改编即可,所以你无需具备任何的开发经验,也无需处理任何技术上的事情。只需要根据自己的需求,编辑自己的题库,然后发布自己的微信答题小程序。
298 0
|
大数据 数据采集 数据挖掘
|
6天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。