Pagini recente » Diferente pentru arhiva-educationala intre reviziile 15 si 13 | Cod sursa (job #3286790) | Diferente pentru arhiva-educationala intre reviziile 13 si 14 | Cod sursa (job #235536) | Cod sursa (job #3292246)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define min(a,b) ((a) < (b) ? (a) : (b))
struct punct
{
double ordonata;
double abscisa;
};
int compare(const void *A, const void *B)
{
struct punct a=*((struct punct*)A);
struct punct b=*((struct punct*)B);
if(a.ordonata-b.ordonata)
return (a.ordonata-b.ordonata);
if(a.abscisa-b.abscisa)
return (a.abscisa-b.abscisa);
}
double distanta(struct punct a, struct punct b)
{
return sqrt((a.ordonata-b.ordonata)*(a.ordonata-b.ordonata)+(a.abscisa-b.abscisa)*(a.abscisa-b.abscisa));
}
double di(struct punct sir[], int i, int j)
{
if(j==i)
return __INT_MAX__;
if(j-i==1)
return distanta(sir[i], sir[j]);
int m=i+(j-i)/2;
double d=min(di(sir, i, m), di(sir, m+1, j));
return d;
}
int main()
{
FILE* in=fopen("cmap.in", "r"), *out=fopen("cmap.out" ,"w");
int n;
fscanf(in, "%d", &n);
struct punct *sir=malloc(n*sizeof(struct punct));
for(int i=0; i<n; i++)
{
fscanf(in, "%lf %lf", &sir[i].ordonata, &sir[i].abscisa);
}
qsort(sir, n, sizeof(struct punct), compare);
double rez=di(sir, 0, n-1);
fprintf(out, "%lf", rez);
return 0;
}