#include "stdafx.h"
#include "point.h"
#include <queue>
#include <iostream.h>
#include<list>
#define numof_points 3
using namespace std;
bool operator <(point a,point b)
{return (a.x<b.x);}
int search(vector<point> &a,int left,int right )
{
if (left==right)
return 100000;
if (right-left==1)
return (a[right].x-a[left].x)*(a[right].x-a[left].x)+(a[right].y-a[left].y)*(a[right].y-a[left].y)
;
int h=search(a, left,(left+ right)/2 );
int k=search(a, (left+ right)/2+1,right );
int p=h<k?h:k;
priority_queue <point> tt;
vector <point> ll;
/* for (int i=0;i<numof_points;i++)
{
d.push_back(heap.top());
heap.pop();
*/
for (int s=left;s<=right;s++)//选出长条之间的点
{
if (abs(a[s].x-a[(left+ right)/2].x)<=p)
{
a[s].swap();//对y坐标排序
tt.push(a[s]);
}
}
while(!tt.empty())
{
ll.push_back(tt.top());
tt.pop();
}
for (int ii=0;ii<ll.size(); ll[ii].swap(),ii++)
for (int iii=ii+1;iii<ll.size();iii++)
if (ll[ii].x-ll[iii].x>p)
{
ll[ii].swap();
break;
}
else if ( (ll[ii].x-ll[iii].x)*(ll[ii].x-ll[iii].x)+(ll[ii].y-ll[iii].y)*(ll[ii].y-ll[iii].y)<p
)
p=(ll[ii].x-ll[iii].x)*(ll[ii].x-ll[iii].x)+(ll[ii].y-ll[iii].y)*(ll[ii].y-ll[iii].y);
return p;
}
int main(int argc, char* argv[])
{
priority_queue<point > heap;
for(int i=0;i<numof_points;i++)
{
cout<<"input point "<<i<<endl ;
point pp;
cin>>pp.x;
cin>>pp.y;
pp.no=i;
heap.push(pp);
}
vector <point> d;
for (i=0;i<numof_points;i++)
{
d.push_back(heap.top());
heap.pop();
}
int mindis=search(d,0,d.size()-1);
cout<<mindis<<endl;
return 0;