uva10034 - Freckles(斑点)
来源:互联网 发布:仿软件园源码 编辑:程序博客网 时间:2024/06/08 08:23
最小生成树的算法的应用。。。。
一个变量的初始化,再次成为我的绊脚石了,,,,wa了三遍。。
思路不难,,
(1)根据坐标产生边,
(2)求解最小生成树。
代码如下:
#include <cstdio>#include <algorithm>#include <cmath>using namespace std;#define M 5000double dot[105][2], w[M];int n, m, u[M], v[M], p[M], r[M];void print_edge(){ m = 0; double dx, dy; for(int i = 0; i < n; i++) for(int j = i+1; j < n; j++) { dx = dot[i][0]-dot[j][0]; dy = dot[i][1]-dot[j][1]; w[m] = sqrt(dx*dx+dy*dy); u[m] = i; v[m] = j; m++; }}int cmp(const int a, const int b) { return w[a]<w[b]; }int find(int x) { return p[x]==x?x:find(p[x]); }double kruskal(){ double ans = 0; for(int i = 0; i < n; i++) p[i] = i; for(int i = 0; i < m; i++) r[i] = i; sort(r,r+m,cmp); for(int i = 0; i < m; i++) { int e = r[i]; int x = find(u[e]); int y = find(v[e]); if(x!=y) { ans += w[e]; p[x] = y;} } return ans;}int main (){ int cas, t = 0; scanf("%d",&cas); while(t++<cas) { scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%lf%lf",&dot[i][0],&dot[i][1]); print_edge(); if(t!=1) printf("\n"); printf("%.2lf\n",kruskal()); }}
- uva10034 - Freckles(斑点)
- uva10034 - Freckles
- UVa10034 Freckles
- UVa10034 Freckles
- uva10034 Freckles
- UVA10034 - Freckles(最小生成树)
- UVa Problem 10034 Freckles (斑点)
- UVa10034
- uva10034
- uva10034
- uva10034
- 九度OJ 1144:Freckles(斑点) (最小生成树)
- Freckles
- Freckles
- 斑点检测
- 斑点检测
- 斑点检测
- 斑点检测
- 学习opencv之Hough变换
- 测试用例
- C++ 概念两则(声明和定义、内部连接和外部连接)
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接---个人整理
- Linux下 fcntl 函数用法说明
- uva10034 - Freckles(斑点)
- 关于shell
- 词汇量统计2--vc界面示例
- android知多少
- 新手上路(一):基于android平台的投票应用的开发(三)之问题整理
- Toad导出数据字典,把数据库所有的表结构导出到htm中。
- cocos2d-x ios下帧数优化分析
- 第十一次课后作业
- servlet中重定向后别忘了return