最近對問題

盈光杯發表於2020-10-07

最近對問題:
最近對問題要求在一個包含n個點的集合中找出距離最近的兩個點。嚴格地講,距離最近的點可能多於一個,簡單起見,只找出其中的一對即可。

#include<iostream>
using namespace std;
int ClosestPoints(int x[],int y[],int n)
{
    int index1,index2;
    int d,minDist=1000;
    for(int i=0;i<n-1;i++)
        for(int j=i+1;j<n;j++)
    {
        d=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
        if(d<minDist)
        {
            minDist=d;
            index1=i;
            index2=j;
        }
    }
    cout<<"最近的點對是:"<<index1<<"和"<<index2<<endl;
    return minDist;
}
int main()
{
    int x[1000],y[1000];
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>x[i]>>y[i];
    int shortest=ClosestPoints(x,y,n);
    cout<<shortest<<endl;
}

相關文章