Bueno la práctica consistía en.. dado un tablero (de un juego) tratar de buscar TODAS las posibles colocaciones que fueran solución y añadirlas en una lista. El algoritmo es recursivo, en el caso base comprueba que es solución y si no lo es.. mira si el siguiente "movimiento" de tablero, o lo que es lo mismo su lista de hijos en el árbol de soluciones, es solución.
Código: Seleccionar todo
public void vueltaAtras(Tablero t) throws Exception{
if(esSolucion(t)) {
listaResultados.anyadeElem(t);
}
else{
Lista<Tablero> listaCandidatos = candidatos(t); //heur. para obtener los movimientos candidato
while(!listaCandidatos.esVacia()){
Tablero hijo = listaCandidatos.damePrimero(); //separar el hijo de la lista
listaCandidatos.eliminaPrimero();//eliminarlo de la lista de candidatos a comprobar
vueltaAtras(hijo);//caso recursivo.. comprobar la lista de candidatos del hijo
}
}
}
Código: Seleccionar todo
public Tablero vueltaAtras(Tablero t) throws Exception{
//ahora devuelve un tablero solucion (si no devuelve null)
if(esSolucion(t)) {
return t;
}
else{ Tablero_Soluc = null;
bool encontrado = false;
Lista<Tablero> listaCandidatos = candidatos(t);
while((! encontrado)&&(! listaCandidatos.esVacia()){
Tablero hijo = listaCandidatos.damePrimero();
listaCandidatos.eliminaPrimero();
Tablero_Soluc = vueltaAtras(hijo);
if(Tablero_Soluc != null) encontrado = true;
}
return Tablero_Soluc;
}
}
Bueno espero que os guste :)
un saludo! R-007