UVa 10034 Freckles 解答
2013-01-08 21:03
441 查看
题目描述:http://uva.onlinejudge.org/external/100/10034.html
典型的最小生成树算法,使用Kruskal算法实现
需要注意的是并查集的使用,查询、优化及合并操作
典型的最小生成树算法,使用Kruskal算法实现
需要注意的是并查集的使用,查询、优化及合并操作
/* * 10034.cc * * Created on: Jan 8, 2013 * Author: root */ #include <stdio.h> #include <math.h> #include <algorithm> typedef struct Edge_ { int start; int stop; double weight; }Edge; typedef struct Node_ { double x; double y; }Node; Node node_list[100]; Edge edge_list[5000]; int edge_number; int father[100]; bool Compare(Edge a, Edge b) { return a.weight < b.weight; } double ComputeEdge(int start, int stop) { double x = node_list[start].x-node_list[stop].x; double y = node_list[start].y-node_list[stop].y; return sqrt(x*x + y*y); } //并查集的查询及优化 int FindFather(int point) { return father[point] == point ? point : father[point] = FindFather(father[point]); } double Compute(int points) { double sum = 0.0; edge_number = 0; for (int i=0; i<points; i++) for (int j=i+1; j<points; j++) { edge_list[edge_number].start = i; edge_list[edge_number].stop = j; edge_list[edge_number].weight = ComputeEdge(i, j); edge_number++; } for (int i=0; i<points; i++) father[i] = i; std::sort(edge_list, edge_list + edge_number, Compare); for (int i=0; i<edge_number; i++) { int pa1 = FindFather(edge_list[i].start); int pa2 = FindFather(edge_list[i].stop); if (pa1 != pa2) { sum += edge_list[i].weight; father[pa1] = pa2;//并查集的合并 } } return sum; } int main(int argc, char** argv) { int cases; scanf("%d", &cases); for (int i=0; i<cases; i++) { int points; scanf("%d", &points); for (int j=0; j<points; j++) { scanf("%lf%lf", &node_list[j].x, &node_list[j].y); } if (i != 0) printf("\n"); printf("%.2f\n", Compute(points)); } return 0; }
相关文章推荐
- UVA 10034 - Freckles
- uva10034 Freckles
- uva 10034 Freckles 最小生成树
- Uva - 10034 - Freckles
- UVA 10034 - Freckles
- uva 10034 Freckles (kruskal||prim)
- UVA 10034 - Freckles
- uva10034 - Freckles
- 【UVA 10034 Freckles】& Kruskal & 最小生成树
- UVA 10034 - Freckles
- UVa:10034 Freckles
- UVa10034 Freckles
- UVa 10034 Freckles
- poj 2560 uva 10034 - Freckles
- UVa 10034 - Freckles
- UVA - 10034 Freckles (kruskal算法)
- UVA 10034 - Freckles
- UVa10034 Freckles
- uva 10034 Freckles
- UVA 10034 - Freckles(最小生成树)