题目描述
给定平面上 n个点,找出其中的一对点的距离,使得在这 n个点的所有点对中,该距离为所有点对中最小的。
输入
第一行一个整数 n,表示点的个数。
接下来 n行,每行两个实数 x,y ,表示一个点的行坐标和列坐标。
输出
仅一行,一个实数,表示最短距离,四舍五入保留5位小数。
样例输入
3 1 1 1 2 2 2
样例输出
1.00000
Code:
#include<bits/stdc++.h>
using namespace std;
vector<pair<long long,long long> >a;
long long n,x,y;
double ans=DBL_MAX,d;
double dis(long long x,long long y,long long xx,long long yy){
return sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy));
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>x>>y;
a.push_back(make_pair(x,y));
}
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
d=dis(a[i].first,a[i].second,a[j].first,a[j].second);
ans=min(ans,d);
}
}
printf("%.5lf",ans);
return 0;
}
/**************************************************************
Problem: 5232
User: yangrenrui
Language: C++
Result: 正确
Time:24 ms
Memory:2180 kb
****************************************************************/