您的位置:首页 > 大数据 > 人工智能

UVA - 10245 The Closest Pair Problem

2014-10-17 19:41 417 查看
题目大意:给出若干个点,找出两个点,使得两点间距离为所有任意两点距离中的最小值。

解题思路:本来这题应该用分治的方法去做的,但是偷了点懒,暴力剪枝过了,剪枝的方法就是将所有点按照x的大小来排序,当point[j].x - point[i].x > min(min 为当前找到的最小值),可以跳出循环,开始判断i+ 1点。

#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;

struct Node{
double x;
double y;
} node[10005];

int cmp(Node a, Node b) {
return a.x < b.x;
}

int main() {
int N;
while (scanf("%d", &N), N) {
for (int i = 0; i < N; i++)
scanf("%lf%lf", &node[i].x, &node[i].y);
sort(node, node + N, cmp);
double min = 10001;
for (int i = 0; i < N; i++)
for (int j = i + 1; j < N && node[j].x - node[i].x < min; j++) {
double X = node[j].x - node[i].x;
double Y = node[j].y - node[i].y;
double temp = sqrt(X * X + Y * Y);
if (temp < min)
min = temp;
}
min >= 10000 ? printf("INFINITY\n") : printf("%.4lf\n", min);
}
return 0;
}

UVA - 10245

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