您的位置:首页 > 其它

uva 10034 Problem A: Freckles

2014-10-13 18:57 316 查看
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=975

最小生成树。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define maxn 1000
using namespace std;
const double inf=(double)(1<<29);

int t,n;
struct node
{
double x,y;
}p[maxn];
bool vis[maxn];
double dis[maxn];
double g[maxn][maxn];
double ans;

double sqr(double x)
{
return x*x;
}

void prim()
{
memset(vis,false,sizeof(vis));
for(int i=1; i<=n; i++) dis[i]=g[1][i];
dis[1]=0;
vis[1]=true;
for(int i=1; i<n; i++)
{
double m=inf;
int x;
for(int y=1; y<=n; y++) if(!vis[y]&&dis[y]<m) m=dis[x=y];
ans+=m;
vis[x]=true;
for(int y=1; y<=n; y++) if(!vis[y]&&dis[y]>g[x][y]) dis[y]=g[x][y];
}
}

int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
}
for(int i=1; i<=n; i++)
{
for(int j=i; j<=n; j++)
{
if(i==j) g[i][j]=0;
else
g[i][j]=g[j][i]=sqrt(sqr(p[i].x-p[j].x)+sqr(p[i].y-p[j].y));
}
}
ans=0;
prim();
printf("%.2lf\n",ans);
if(t) printf("\n");
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: