A ver si alguien me puede ayudar.
Tengo el siguiente código en C++ de la función main:
int main()
{
time_t t1, t2;
int x,y,*dir,ch;
casillero c1,c2;
TipoDePoda poda;
booleano ok;
CLista<CPuzzle> solucion;
printf("\nEstado inicial:"); //Pedimos los datos del estado
EntradaDatos(c1,x,y); //inicial y creamos p1.
CPuzzle p1(c1,x,y);
printf("\nEstado final:"); //Pedimos los datos del estado
EntradaDatos(c2,x,y); //final y creamos p2.
CPuzzle p2(c2,x,y);
printf("\nQue heuristica quieres usar?");
printf("\n\t(1) Aciertos.\n\t(2) Distancias.\n");
printf("\t? ");
scanf("%i",&x);
if (x==1) p1.UsarH(aciertos); //Elegimos la heuristica a utilizar
else p1.UsarH(distancias);
printf("\nQue tipo de poda quieres usar?");
printf("\n\t(1) Sin poda. \n\t(2) Poda parcial.\n\t(3) Poda total.\n");
printf("\t? ");
scanf("%i",&x);
if(x==1) poda=sinPoda; // Y el tipo de poda
if(x==2) poda=podaParcial;
if(x==3) poda=podaTotal;
dir=(int *) &costeOperador; //Apunta al vector de costes de los
//operadores.
//Con todos los datos creamos una instancia de 'problema'
CProblema<CPuzzle> problema(p1,p2,4,dir,50);
IDA<CPuzzle> algoritmo(&problema);
//Resolvemos el puzzle
t1=time(NULL);
algoritmo.BuscarSolucion(&solucion,poda);
t2=time(NULL);
printf("\n");
x=-1;
while (!solucion.EsVacia()) //Si hay solucion...
{
solucion.Extraer(p1);
printf("Estado %i: ",++x); //...la presentamos por pantalla
p1.Dibujar();
ch=getchar();
}
//Presentacion del resto de los datos.
printf("\nTiempo: %f",difftime(t2,t1));
printf("\nLongitud de la solucion: %i",algoritmo.LongitudSolucion());
printf("\nNumero de nodos expandidos: ");
cout << algoritmo.NodosExpandidos();
printf("\nPenetracion (L/T): %f",algoritmo.Penetracion());
double sol=algoritmo.FacRamificacion(ok);
printf("\nFactor de ramificacion: %f",sol);
if (ok) printf(" (OK)\n");
if (!ok) printf(" (FALLO)\n");
printf("Comprobacion: %f",func(sol));
printf("\nMaximo nivel del arbol (maximo numero de nodos\nen memoria simultaneamente): %i\n",
algoritmo.MaximoNivel());
}
Cuando lo compilo, me da el siguiente error:
Message
In function ‘int main()’
No matching function for cal to ‘IDA<CPuzzle>::BuscarSolucion(CLista<CPuzzle>*, TipoDEPODA&)’
Candidates are: int IDA<X>::BuscarSolucin(CLixta<X>&, TipoDePoda) [with X=CPuzzle]
[Build Error]:[ida.o] Error 1
En concreto es la línea que anteriormente he marcado en rojo. El código de la función que da el error es el siguiente:
template <class X> booleano IDA<X>::BuscarSolucion(CLista<X> &lista, TipoDePoda p)
{
booleano ok; //indicar cu ndo hay soluci¢n.
CNodoHeur<X> actual;
poda=p; //Tipo de poda a realizar
//El nodo actual es el de la cabeza de la lista ( rbol)
actual=arbol.VerCabeza();
//Como primer l¡mite-f cogemos el valor F del nodo ra¡z:
coste limF=actual.F();
do { //Repetimos la llamada a ContornoDFS hasta tener soluci¢n o
printf("\nLimite F: %i",limF); //llegar al coste m ximo.
nivel=1;
limF=ContornoDFS(limF, ok);}
while ( (!ok) && (limF<problema->costeMaximo) );
if (ok) //Si hay soluci¢n extraemos los nodos de la ruta soluci¢n,
{ //de tipo CNodoHeur<X>, y los insertamos en una lista de tipo
//X, que ser la que se devuelva.
longitudSolucion=-1;
while (!arbol.EsVacia()) //Mientras haya nodos en el rbol
{
arbol.Extraer(actual); //Los extraemos
lista.Insertar(actual.Estado()); //insertamos el
longitudSolucion++; //ESTADO en otra lista e
//incrementamos la long. de la soluci¢n
}
}
return ok;
}
No sé si tendréis los datos suficientes para ayudarme, si necesitáis cualquier otra cosa, por favor, comunicármelo. Lo necesito urgentemente. Siento mucho la parrafada.
Muchas gracias, saludos.