最小生成树-Uva10034

原创 2013年12月02日 21:27:56

Problem A: Freckles

In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to form a picture of the Liberty Bell. Alas, one of the freckles turns out to be a scar, so his Ripley's engagement falls through.

Consider Dick's back to be a plane with freckles at various (x,y) locations. Your job is to tell Richie how to connect the dots so as to minimize the amount of ink used. Richie connects the dots by drawing straight lines between pairs, possibly lifting the pen between lines. When Richie is done there must be a sequence of connected lines from any freckle to any other freckle.

Input

The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, and there is also a blank line between two consecutive inputs.

The first line contains 0 < n <= 100, the number of freckles on Dick's back. For each freckle, a line follows; each following line contains two real numbers indicating the (x,y) coordinates of the freckle.

Output

For each test case, the output must follow the description below. The outputs of two consecutive cases will be separated by a blank line.

Your program prints a single real number to two decimal places: the minimum total length of ink lines that can connect all the freckles.

Sample Input

1

3
1.0 1.0
2.0 2.0
2.0 4.0

Sample Output

3.41

不所说,裸的最小生成树。
下面是代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
const double INF=1000000000000.0;
struct node
{
    double x,y;
} dian[150];
int n;
double grid[150][150];
double dist[150];
bool vis[150];
void prim()
{
    for(int i=1; i<=n; i++)
    {
        dist[i]=grid[1][i];
        vis[i]=false;
    }
    dist[1]=0;
    vis[1]=true;
    int x;
    for(int i=1; i<n; i++)
    {
        double maxn=INF+10;
        for(int j=1; j<=n; j++)
        {
            if(!vis[j]&&dist[j]<maxn)
            {
                maxn=dist[j];
                x=j;
            }
        }
        vis[x]=true;
        for(int j=1; j<=n; j++)
        {
            if(!vis[j]&&dist[j]>grid[x][j])
            {
                dist[j]=grid[x][j];
            }
        }
    }
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        cin>>n;
        double x,y;
        for(int i=1; i<=n; i++)
            fill(grid[i],grid[i]+n+1,INF);
        for(int i=1; i<=n; i++)
        {
            cin>>dian[i].x>>dian[i].y;
            for(int j=1; j<i; j++)
            {
                double dis=pow((dian[j].x-dian[i].x),2)+pow((dian[j].y-dian[i].y),2);
                dis=sqrt(dis);
                grid[i][j]=grid[j][i]=dis;
            }
        }
        prim();
        double ans=0;
        for(int i=1; i<=n; i++)
            ans+=dist[i];
        printf("%.2lf\n",ans);
        if(t!=0)
            cout<<endl;
    }
    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

uva10034 最小生成树

#include #include #include #include #include #include #include using namespace std; const int...
  • newbaby2012
  • newbaby2012
  • 2014年01月09日 20:45
  • 403

UVA10034 - Freckles(最小生成树)

UVA10034 - Freckles(最小生成树) UVA10034 - Freckles 题目大意:  给你n个雀斑的位置,每个雀斑看作一个点,问使得这个雀斑相互连通的最短的路径长度...
  • u012997373
  • u012997373
  • 2015年05月28日 20:09
  • 495

uva10034

题目大意: 给出背上斑点的坐标,求连接这些斑点所用的最少的墨水。思路: 最小生成树代码:#include using namespace std; #include #include #in...
  • vv494049661
  • vv494049661
  • 2016年03月09日 21:00
  • 240

UVa10034

这道题就是最小生成树的题,给n个点的坐标,求最小生成树第一次wa了,错误很低级,忘记反过来给左下角的元素赋值了代码如下: #include #include #include const in...
  • AClion
  • AClion
  • 2013年01月25日 21:51
  • 353

UVa10034/POJ2560_Freckles(最小生成树)(小白书图论专题)

解题报告 题意: 把所有点连起来,求使用的墨水最少。 思路: 裸最小生成树。 #include #include #include #include #define inf 0x3f3f3f3...
  • u013320038
  • u013320038
  • 2014年08月19日 09:33
  • 2524

uva10034 Freckles

题意: 最小生成树 思路: 1.求出每两点之间的距离,去一个点最为根,将所有点的距离初始化为到根的距离 2.求出未考虑的点到已考虑的点的最短距离,并标记这个点为已考虑(里层循环),每纳入一个新...
  • deepquiet
  • deepquiet
  • 2016年03月11日 13:40
  • 116

uva10034 - Freckles

给出点的坐标,求出将所有的点连起来的最小长度。 #include #include struct node {     double x,y; }p[101]; double map[1...
  • a451907
  • a451907
  • 2012年11月17日 00:43
  • 115

uva10034(并查集)

题目的意思给出很多个点, 问把这些点liant
  • yeyeyeguoguo
  • yeyeyeguoguo
  • 2014年11月04日 21:53
  • 278

最小生成树总结

一.最小生成树问题 给定一张图,图中有许多的节点还有许多长度不同的边将这些点点相互连接,找出连接所有点的最短方式就是最小生成树,可以证明,这样一种最小的情况是不会出现环的,由于所有的无环图都可以看做...
  • u013555159
  • u013555159
  • 2016年05月07日 12:13
  • 849

比较好的题目“典型的最小生成树”

Watering Hole My Tags   (Edit)   Source : USACO 2008 Open  ...
  • struggle_mind
  • struggle_mind
  • 2014年05月07日 21:33
  • 1043
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最小生成树-Uva10034
举报原因:
原因补充:

(最多只允许输入30个字)