/*#include <stdio.h>
#include <stdlib.h>
#include "math.h"
typedef struct {
float x, y;
} Punct;
int N;
Punct *puncte;
int cmp(const void *A, const void *B)
{
return ((Punct*)A)->x - ((Punct*)B)->x;
}
float distanta(Punct A, Punct B)
{
return sqrt((B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y));
}
float min(float a, float b)
{
if (a < b)
return a;
return b;
}
void citeste()
{
FILE *fisier = fopen("cmap.in", "r");
fscanf(fisier, "%d", &N);
puncte = (Punct*) malloc(N * sizeof(Punct));
for (int i = 0; i < N; i ++)
fscanf(fisier, "%f %f", &puncte[i].x, &puncte[i].y);
fclose(fisier);
}
float rezolva(int s, int d)
{
int m = (s + d) / 2;
if (d - s == 1)
return distanta(puncte[s], puncte[d]);
else
return min(rezolva(s, m), rezolva(m, d));
}
int main()
{
citeste();
qsort(puncte, N, sizeof(Punct), cmp);
FILE *fisier = fopen("cmap.out", "w");
fprintf(fisier, "%f", rezolva(0, N - 1));
fclose(fisier);
return 0;
}*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct punct
{
int x,y;
}Puncte;
void citireDate(Puncte **p,int *n)
{
FILE *fpin;
fpin=fopen("cmap.in","r");
int n_temp;
fscanf(fpin,"%d", &n_temp);
printf("%d \n", n_temp);
*p=(Puncte *)malloc(n_temp*sizeof(Puncte));
int i;
for(i=0;i<n_temp;i++){
fscanf(fpin,"%d %d", &((*p)[i].x), &((*p)[i].y));
}
*n=n_temp;
fclose(fpin);
free(p);
}
float calculDistanta(Puncte p1, Puncte p2)
{
float a,b;
a=p1.x-p2.x;
b=p1.y-p2.y;
return sqrt(pow(a,2)+pow(b,2));
}
int cmp(const void *a, const void *b)
{
int l = ((Puncte*)a)->x;
int r = ((Puncte*)b)->x;
return (l - r);
}
void sortareDate (Puncte **p,int n)
{
qsort(*p,n,sizeof(Puncte),cmp);
}
void divide_et_impera(Puncte *p,int st, int dr, float *minim)
{
int mij=(st+dr)/2;
if(st==dr)
if(calculDistanta(p[st],p[dr])<(*minim))
*minim=calculDistanta(p[st],p[dr]);
else
{
divide_et_impera(p,st,mij,&minim);
divide_et_impera(p,mij+1,dr,&minim);
}
}
void afisareDate(Puncte *p, int n)
{
int i;
for(i=0;i<n;i++)
printf("%d %d \n", p[i].x, p[i].y);
}
int main()
{
Puncte *p;
p=NULL;
int n=-1;
citireDate(&p,&n);
sortareDate(&p,n);
float minim=calculDistanta(p[n/2],p[n/2 + 1]);
divide_et_impera(p,0,n-1,&minim);
afisareDate(p,n);
FILE* fisier = fopen("cmap.out", "w");
fprintf(fisier, "%f", minim);
return 0;
}