/* zoj_2107 计算几何 分治法求最近点对,模板题 */ #include <iostream> #include <cstdio> #include <limits.h> #include <math.h> #include <algorithm> //#define min(a,b) a<b?a:b 居然不能这样写??为什么?? using namespace std; struct node { double x,y; }p1[100010],p2[100010]; double min(double a,double b) { return a<b?a:b; } bool cmpx( node a,node b ) { return a.x<b.x; } bool cmpy( node a,node b ) { return a.y<b.y; } double dis( node a,node b ) { return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y) ); } double solve( int l,int r ) { int mid,m,i,j; double d; if( r==l+1 ) return dis( p1[l],p1[r] ); if( r==l+2 ) return min( dis( p1[l],p1[l+1] ),min( dis(p1[l],p1[r]),dis(p1[l+1],p1[r]) ) ); mid=( l+r )/2; d=min( solve(l,mid),solve(mid+1,r) ); m=0; for( i=l;i<=r;i++ ) if( p1[i].x>=p1[mid].x-d && p1[i].x<=p1[mid].x+d ) p2[m++]=p1[i]; sort( p2,p2+m,cmpy ); for( i=0;i<m;i++ ) for( j=i+1;j<m;j++ ) { if( p2[j].y-p2[i].y>=d ) break; d=min( d,dis( p2[i],p2[j] ) ); } return d; } int main() { int i,j,n; while( scanf("%d",&n) && n ) { for( i=0;i<n;i++ ) scanf( "%lf%lf",&p1[i].x,&p1[i].y ); sort( p1,p1+n,cmpx ); printf( "%.2lf\n",solve( 0,n-1 )/2 ); } return 0; }