HDU 1162
来源:互联网 发布:程序员被黑 编辑:程序博客网 时间:2024/06/06 06:31
最小生成树就是求,最短路!每个点之间必须是联通的!可以是最短路径,也可以是最少花费!
#include <iostream>
#include <cstdio>#include <cstring>
#include <cmath>
const int maxn=105;
const int MAX=10000;
double map[maxn][maxn];
double dist[maxn];
bool isvisit[maxn];
typedef struct node
{
double x;
double y;
}node;
void init()
{
int i,j;
for(i=0; i<maxn; i++)
{
for(j=0; j<maxn; j++)
{
if(i==j)map[i][j]=0;
map[i][j]=MAX;
}
}
}
double caculat(node a, node b)
{
double len;
len=sqrt(1.0*(a.x-b.x)*(a.x-b.x)+1.0*(a.y-b.y)*(a.y-b.y));
return len;
}
double prim(int n)
{
int i,j,pos,min;
double sum=0;
memset(isvisit,false,sizeof(isvisit));
for(i=1; i<=n ;i ++)
dist[i]=map[1][i];
isvisit[1]=true;
dist[1]=MAX;
for(i=1; i<n; i++)
{
min=MAX;
for(j=1; j<=n; j++)
{
if(!isvisit[j]&&min>dist[j])
{
min=dist[j];
pos=j;
}
}
isvisit[pos]=true;
sum+=dist[pos];
for(j=1; j<=n; j++)
{
if(!isvisit[j]&&dist[j]>map[pos][j])
{
dist[j]=map[pos][j];
}
}
}
return sum;
}
int main()
{
node p[maxn];
int n,i,j;
double sum,len;
while(scanf("%d",&n)!=EOF)
{
init();
for(i=1; i<=n; i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
}
for(i=1; i<n; i++)
{
for(j=i+1; j<=n; j++)
{
len=caculat(p[i],p[j]);
map[i][j]=map[j][i]=len;
}
}
sum=prim(n);
printf("%.2lf\n",sum);
}
return 0;
}
- hdu 1162
- hdu 1162
- HDU 1162
- hdu 1162
- hdu-1162
- hdu 1162
- hdu 1162
- hdu 1162
- hdu 1162 prim算法
- hdu 1162(Kruskal)
- hdu 1162 prim模板
- HDU 1162 Prim
- hdu 1162 kruscal
- hdu 1162 Prim
- hdu
- hdu
- HDU
- hdu ()
- 九度oj1006zoj问题
- 多条件运算时SQL的写法
- 新版MapReduce的API编程简单模板
- Junit4使用方法
- POJ2451Uyuw's Concert
- HDU 1162
- 关于C中可变参数的记录
- shell实现旋转线
- poco在qnx上编译(附网上找的在iphone上编译)
- 命令行打印某个程序的socket信息
- 多种方法教你如何让手机免费上网
- 关于ios发布AppStore验证UUID不过的问题
- hibernate xml中cascade 的属性解说
- Python Exercise #24