Le comento que hago todo el recorrido y encuentro la solución, pero ahora quiero mostrar los pasos
Código PHP:
class TresporTres {
Queue<String> q = new LinkedList<String>();
Map<String,Integer> map = new HashMap<String, Integer>();
public static void main(String args[]){
String str="012001212";
TresporTres e = new TresporTres();
e.add(str,0);
while(e.q.peek()!=null){
e.a(e.q.peek());
e.b(e.q.peek());
e.c(e.q.peek());
e.d(e.q.remove());
}
System.out.println("No hay solucion");
}
void add(String str,int n){
if(!map.containsKey(str))//Pregunta si esta la cadena str en map
{
map.put(str,n); //Incrementa la cuenta
q.add(str); //y la Agrega a q
System.out.println("ADENTRO DE ADD Movimiento "+str+" Nivel "+map.get(str)+" N = "+n);
}
}
void a(String str){
String s = str.substring(3,4)+str.substring(0,1)+str.substring(2,3)+str.substring(4,5)+str.substring(1,2)+str.substring(5);
add(s,map.get(str)+1);
System.out.println("Movimiento a "+str+" Valor de s " +s+" Nivel "+map.get(s);
if(s.equals("000111222")) {
System.out.println("Solucion en Nivel "+map.get(s));
System.exit(0);
}
}
como pueden ver, itero y encuentro la solucion y encuentro el nivel.
Pero lo que me falta hacer es mostrar los movimientos correctos, por cierto es una busqueda por amplitud..
quiero que me diga A B A D << NIVEL 4
creo k tengo k poner otra cola, pero la verdad no tengo idea de como hacerle..
osea esta iterando y hace los 4 movimientos.. A B C D .. no encuentra la sol.. y hace
A -> A B C D si no encuentro hace B -> A B C D y asi...
pero la solucion quiere decir que hizo
A B C D
A B C D
A B C D A B C D A B C D A B C D
luego se supone que hizo
A B C D
A B C D A B C D A B C D A B C D
A B C D A B C D A B C D A B C D A B C D A B C D A B
y pues crece exponencialmente ....espero haber explicado.......
Se me ocurre meter otra cola...y pues reiniciarla ...pero no se cuando reiniciarla...
saludos y de antemano gracias
012
001
212 el programa hace cuando entra a A
002
011
212 GIRA LA MATRIX DE 2X2 SUP DERECHA.
LA FUNCION B GIRA LA MATRIZ DE 2X2 SUP IZQUIERDA
LA FUNCION C GIRA LA MATRIZ INF DERECHA
Y LA D LA INF IZQUIERA