#include #include #include #include #include using namespace std; typedef pair 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 & 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); } void ver(const vector & puntos) { for (const auto & p : puntos) cout << "( " << p.first << " , " << p.second << " )"; } int main () { cout << "Primera prueba: con puntos elegidos" << endl; cout << "===================================" << endl; vector puntos = {Punto(2, 3), Punto(5,7), Punto(3, 4), Punto(4, 4), Punto(4, 4), Punto(5,7)}; while (puntos.size() >= 2) { cout << "Puntos: "; ver(puntos); cout << " ---> Distancia minima: " << distanciaMinima(puntos) << endl; puntos.pop_back(); } cout << endl; cout << "Segunda prueba: con puntos generados aleatoriamente" << endl; cout << "===================================================" << endl; default_random_engine default_random; uniform_real_distribution generadorAleatorio(-1000.0, 1000.0); for (int talla = 2, tallaMax = 10; tallaMax <= 100000; tallaMax *= 10) for (; talla < tallaMax; talla += tallaMax / 10) { while(puntos.size() < talla) puntos.push_back(Punto(generadorAleatorio(default_random), generadorAleatorio(default_random))); float distancia = distanciaMinima(puntos); cout << "Cantidad de puntos: " << talla << " ---> Distancia minima: " << distancia << endl; } }