Home Algoritmos y Estructuras de Datos (VJ1215)

Curso 2023/2024

Ejemplos de errores en el ejercicio 7.b del tema 5.3

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);

}
      

¿Por qué es incorrecta?

  1. La variable minimo debería ser de tipo float.

  2. El bucle debería llegar hasta la última aldea inclusive.

  3. costeAlquiler[aldea][siguienteAldea] no hay que sumarlo a intento dentro del if sino antes.