编辑代码

#include<algorithm>
#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;

struct point 
{
	double x,y;
};
double Distance(point a,point b)
{
    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
bool X(point a,point b)
{          
    return a.x<b.x;
}
bool Y(point a,point b) 
{          
    return a.y<b.y;
}
double Min(double a, double b)
{
	if(a>b) return b;
    else return a;
}



double Closest(point Dot[],int n)
{
    double mid;
    double min;
    sort(Dot,Dot+n,X);


    double min1=Distance(Dot[0],Dot[1]);
    double min2=Distance(Dot[n-2],Dot[n-1]);
    mid=Dot[n/2].x;
    for(int i=0;i<mid;i++)
        for(int j=i+1;j<mid;j++)
            if(Distance(Dot[i],Dot[j])<min1)
                min1=Distance(Dot[i],Dot[j]);

    for(int i=mid;i<n;i++)
        for(int j=i+1;j<n;j++)
            if(Distance(Dot[i],Dot[j])<min2)
                min2=Distance(Dot[i],Dot[j]);



         min= Min(min1,min2);

        point Dot1[10];
        int g=0;
        double min3;


        for(int i=0;i<n;i++)
            if(abs(Dot[i].x-mid)<min)
                Dot1[g++]=Dot[i];

        sort(Dot1,Dot1+g,Y);
		int l=0;
        for(int i=0;i<g;i++)
			for(int k=i+1;k<g;k++)
				if(l<4)
					min3=Min(Distance(Dot1[i],Dot1[k]),min),l++;
				else break;

          
         
        return min3;
    


}   

int main()
{
    int n;
    scanf("%d",&n);
    point Dot[10];
    for(int i=0;i<n;i++)
		cin>>Dot[i].x>>Dot[i].y;
    printf("%f",Closest(Dot,n));
}