Home Algoritmos y Estructuras de Datos (VJ1215)

Curso 2023/2024

Solución del ejercicio 6.a del tema 5.2

Fíjate en estos dos detalles de la siguiente solución: el uso de Punto, y la utilización de sqrt una sola vez.

typedef pair<float, float> Punto;

float distanciaAlCuadrado(const Punto & p1, const Punto & p2) {

   float a = p2.first  - p1.first;
   float b = p2.second - p1.second;
   return a * a + b * b;

}

float distanciaMinima(const vector<Punto> & puntos) {

   if (puntos.size() < 2)
      throw string("Necesitamos al menos dos puntos.");

   float minima = distanciaAlCuadrado(puntos[0], puntos[1]);

   for (int i = 0; i < puntos.size() - 1; i++)
      for (int j = i + 1; j < puntos.size(); j++)
	 minima = min(minima,
		      distanciaAlCuadrado(puntos[i], puntos[j]));
  
   return sqrt(minima);
      
}