Curso 2024/2025
Ayuda al autor de la siguiente implementación a encontrar los errores que hacen que no funcione correctamente.
/*************************************************************************** VERSION 1: RECURSIVA, INEFICIENTE ***************************************************************************/ #define INFINITO numeric_limits<float>::infinity() float minimoCoste(const vector<vector<float> > & costeAlquiler, int aldea) { float resultado; int ultimaAldea = costeAlquiler.size() - 1; if (aldea == ultimaAldea) resultado = 0; else { int minimo = INFINITO; for (int siguienteAldea = aldea + 1; siguienteAldea < ultimaAldea; siguienteAldea++) { int intento = minimoCoste(costeAlquiler, siguienteAldea); if (intento < minimo) minimo = intento + costeAlquiler[aldea][siguienteAldea]; } resultado = minimo; } return resultado; } float minimoCoste(const vector<vector<float> > & costeAlquiler) { return minimoCoste(costeAlquiler, 0); }
La variable minimo
debería ser de tipo float
.
El bucle debería llegar hasta la última aldea inclusive.
costeAlquiler[aldea][siguienteAldea]
no hay
que sumarlo a intento
dentro
del if
sino antes.