0
点赞
收藏
分享

微信扫一扫

Gemma

以前干嘛去了 02-29 08:30 阅读 4
算法

题目描述

给定平面上 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
****************************************************************/
举报

相关推荐

0 条评论