最近对问题
1000(ms)
10000(kb)
1002 / 5242
Tags: 分治法
设p1=(x1,y1),p2=(x2,y2),…, pn=(xn,yn)是平面上n个点构成的集合S,设计算法找出集合S中距离最近的点对。
输入
多组测试数据,第一行为测试数据组数n(0 输出
每组测试数据输出一行,为该组数据最近点的距离,保留4为小数。 样例输入
2 2 0 0 0 1 3 0 0 1 1 1 0 样例输出
1.0000 1.0000
@浅夏沫若:code
#include
#include
#include
using namespace std;
struct Point
{
int x;
int y;
};
int main()
{
int counter = 0;
cin >> counter;
while (counter--)
{
int n=0;
double max = 0.0000;
double distance = 0.0000;
Point p[100001];
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> p[i].x >> p[i].y;
}
if (n < 2)
max = 0;
else
max = sqrt((p[0].x - p[1].x)*(p[0].x - p[1].x) + (p[0].y - p[1].y)*(p[0].y - p[1].y));
for (int i = 0; i < n - 1; i++)
{
for (int j = i+1; j < n; j++)
{
distance = sqrt((p[i].x - p[j].x)*(p[i].x - p[j].x) + (p[i].y - p[j].y)*(p[i].y - p[j].y));
if (distance < max)
max = distance;
}
}
printf("%.4lfn", max);
}
return 0;
}