平面上的最接近点对
题目描述
给定平面上 n n n 个点,找出其中的一对点的距离,使得在这 n n n 个点的所有点对中,该距离为所有点对中最小的。
输入格式
第一行一个整数 n n n,表示点的个数。
接下来 n n n 行,每行两个实数 x , y x,y x,y ,表示一个点的行坐标和列坐标。
输出格式
仅一行,一个实数,表示最短距离,四舍五入保留 4 4 4 位小数。
样例 #1
样例输入 #1
3
1 1
1 2
2 2
样例输出 #1
1.0000
提示
数据规模与约定
对于 100 % 100\% 100% 的数据,保证 1 ≤ n ≤ 1 0 4 1 \leq n \leq 10^4 1≤n≤104, 0 ≤ x , y ≤ 1 0 9 0 \leq x, y \leq 10^9 0≤x,y≤109,小数点后的数字个数不超过 6 6 6。
对于这个数据量,直接采取暴力破解
#include<bits/stdc++.h>
using namespace std;
struct Point
{
double x,y;
};
int main()
{
int n;
Point point[10006];
cin>>n;
for(int i=0;i<n;++i)
cin>>point[i].x>>point[i].y;
double ans=999999999;
for(int i=0;i<n;++i){
for(int j=0;j!=i&&j<n;++j)
{
double m=(point[i].x-point[j].x)*(point[i].x-point[j].x);
double k=(point[i].y-point[j].y)*(point[i].y-point[j].y);
double temp=sqrt(m+k);
ans=min(ans,temp);
}
}
cout<<fixed<<setprecision(4)<<ans<<endl;
return 0;
}