hdu 1162 裸最下生成树 prim
来源:互联网 发布:高中历史辅助教程 知乎 编辑:程序博客网 时间:2024/05/16 10:39
题意: 不解释,很简单。
思路: 刚刚开始准备用克鲁斯卡尔算法,但一想这是稠密图,故用prim算法解之,看下面代码吧, 好久没写代码了,准备各种考试,但是各种不顺,还是写代码爽,哈哈。。
代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
#define N 105
#define INF 1 << 30
struct point
{
double x, y;
}a[N];
int main()
{
int i, j, k, n, v;
double min, sum;
double edge[N][N], dist[N], near[N];
while(scanf("%d", &n) != EOF){
memset(near, 0, sizeof(near));
for(i = 1; i <= n; ++i){
scanf("%lf %lf", &a[i].x, &a[i].y);
}
for(i = 1; i < n; ++i){
for(j = i + 1; j <= n; ++j){
edge[i][j] = edge[j][i] = (a[i].x - a[j].x) * (a[i].x - a[j].x)
+ (a[i].y - a[j].y) * (a[i].y - a[j].y);
}
}
for(i = 1; i <= n; ++i){
dist[i] = edge[1][i];
}
near[1] = -1;
sum = 0;
for(i = 1; i < n; ++i){
min = INF; v = -1;
for(j = 1; j <= n; ++j){
if(near[j] != -1 && dist[j] < min)
min = dist[j], v = j;
}
if(v != -1){
sum += sqrt(min);
near[v] = -1;
for(j = 1; j <= n; ++j){
if(near[j] != -1 && edge[v][j] < dist[j]){
dist[j] = edge[v][j];
}
}
}
}
printf("%.2lf\n", sum);
}
return 0;
}
- hdu 1162 裸最下生成树 prim
- hdu 1162 Eddy's picture(最小生成树Prim算法)
- hdu 1162 Eddy's picture(最小生成树prim)
- HDU 1162 Eddy's picture(最小生成树-Prim)
- hdu 1162 Eddy's picture(最小生成树,prim)
- HDU 3371(最小生成树,Prim)
- HDU-1875 最小生成树 PRIM
- HDU-1233(prim求最小生成树)
- HDU-1879(prim构最小生成树)
- HDU-1102(prim求最小生成树)
- 最小生成树 Prim (hdu 1875)
- HDU 1233 prim kruskal最小生成树
- HDU 1863 prim最小生成树
- HDU 1879 最小生成树 prim + kruskal
- hdu 1879 最小生成树 prim
- hdu 1233 最小生成树Prim算法
- 【最小生成树】hdu 1875 prim
- hdu 4463 最小生成树 prim
- Java SE工程项目使用相对路径添加jar包
- android开发问题(二)解决ScrollView加入后无法执行OnGestureListener的监听函数
- ARM GCC 内嵌汇编手册
- GROUPING 、GROUPING SETS用法
- 小项目实用makefile
- hdu 1162 裸最下生成树 prim
- ARM地址重映射机制
- 十分钟安装带认证的sendmail
- com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java:1414:-1
- .NET中的应用程序启用可视样式
- 暗拍 张开双腿的美女~~~
- 黑马程序员 总结---> 传递问题
- iptables 高级学习笔记
- Android中Intent传值和Bundle传值两者的不同