limpié divide and conquer

This commit is contained in:
Rodolfo Cuevas 2018-12-12 12:09:56 -03:00
parent daf9d6cc4a
commit a72f55594b
1 changed files with 19 additions and 17 deletions

View File

@ -25,28 +25,23 @@
* @param minimum_dist La distancia minimo encontrado * @param minimum_dist La distancia minimo encontrado
* @return Retorna los 2 puntos mas cercanos * @return Retorna los 2 puntos mas cercanos
*/ */
point_t * divide_and_conquer(point_t *points, unsigned int n, double *minimum_dist) { int compareX(const void* a, const void* b){ //ordena el arreglo de puntos de acuerdo a X
if (n <= 3)
return brute_force(points, n, &minimum_dist);
int compareX(const void* a, const void* b){ //ordena el arreglo de puntos de acuerdo a X
Point *p1 = (Point *)a, *p2 = (Point *)b; Point *p1 = (Point *)a, *p2 = (Point *)b;
return (p1->x - p2->x); return (p1->x - p2->x);
} }
int compareY(const void* a, const void* b){ //ordena el arreglo de puntos de acuerdo a Y int compareY(const void* a, const void* b){ //ordena el arreglo de puntos de acuerdo a Y
Point *p1 = (Point *)a, *p2 = (Point *)b; Point *p1 = (Point *)a, *p2 = (Point *)b;
return (p1->y - p2->y); return (p1->y - p2->y);
} }
// Función para encontrar la distancia minima entre dos valores de tipo flotante
float min(float x, float y)
{
return (x < y)? x : y;
}
// Función para encontrar la distancia entre los puntos más cerca del arreglo dado float min(float x, float y){ // Función para encontrar la distancia minima entre dos valores de tipo flotante
float stripClosest(Point strip[], int size, float d) return (x < y)? x : y;
{ }
float stripClosest(Point strip[], int size, float d) // Función para encontrar la distancia entre los puntos más cerca del arreglo dado
{
float min = d; // inicializa en la distancia minima d float min = d; // inicializa en la distancia minima d
qsort(strip, size, sizeof(Point), compareY); qsort(strip, size, sizeof(Point), compareY);
@ -57,7 +52,14 @@ point_t * divide_and_conquer(point_t *points, unsigned int n, double *minimum_di
min = dist(strip[i], strip[j]); min = dist(strip[i], strip[j]);
return min; return min;
} }
point_t * divide_and_conquer(point_t *points, unsigned int n, double *minimum_dist) {
if (n <= 3)
return brute_force(points, n, &minimum_dist);
// Función para encontrar la distancia más corta entre puntos // Función para encontrar la distancia más corta entre puntos
float closestUtil(Point P[], int n) float closestUtil(Point P[], int n)