洛谷-P1257 平面上的最接近点对
题目描述
给定平面上 (n) 个点,找出其中的一对点的距离,使得在这 (n) 个点的所有点对中,该距离为所有点对中最小的。
输入格式
第一行一个整数 (n),表示点的个数。
接下来 (n) 行,每行两个实数 (x,y) ,表示一个点的行坐标和列坐标。
输出格式
仅一行,一个实数,表示最短距离,四舍五入保留 (4) 位小数。
输入输出样例
输入 #1
3
1 1
1 2
2 2
输出 #1
1.0000
说明/提示
数据规模与约定
对于 (100\%) 的数据,保证 (1 leq n leq 10^4),(0 leq x, y leq 10^9),小数点后的数字个数不超过 (6)。
C++代码
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
int n;
scanf("%d", &n);
double x[n], y[n], d, ans=2000000000;
for (int i=0; i<n; ++i)
scanf("%lf%lf", &x[i], &y[i]);
for (int i=0; i<n; ++i)
for (int j=i+1; j<n; ++j) {
d = sqrt(pow(x[i]-x[j], 2) + pow(y[i] - y[j], 2));
if (d < ans)
ans = d;
}
printf("%.4lf
", ans);
return 0;
}