public static void main(String args[]) throws IOException { File _= new File("input0"); BufferedReader br = new BufferedReader( _.exists()?new FileReader(_):new InputStreamReader(System.in) ); StringTokenizer st; String line = ""; // Numero de Tableros n = Integer.parseInt(br.readLine()); for (int casos = 0; casos < n ; casos++) { Cubo cubo = lectura(br); //Descomentar para ver como queda el Cubo //System.out.println("***CUBO***"+cubo); inicial = new NodeCubo(0, Heuristica.h1(cubo), cubo); System.out.println(cubo); Giros mano = new Giros(); //Cubo caux = new Cubo(mano.girar(cubo.getCubo(), 4), cubo.getColors()); //System.out.println(caux); //caux = new Cubo(mano.girar(cubo.getCubo(), 6), cubo.getColors()); //System.out.println(caux); Cubo caux = new Cubo(mano.girar(cubo.getCubo(), 2), cubo.getColors()); System.out.println(caux); /*Q = new PriorityQueue<>(); long time_init = System.currentTimeMillis(); int pasos = search(); long time_fin = System.currentTimeMillis(); System.out.println("Caso "+casos+": Pasos-> "+pasos+" Estado inicial-> "+inicial.estado+" Tiempo t-> "+(time_fin-time_init)); */ } }
// Busqueda usando A* public static int search() { HashSet<State> v = new HashSet<>(); Giros mano = new Giros(); ArrayList<int[][]>aux; finall = inicial.createGoalState(); Q.add(inicial); Node actual; int cont = 0; while ( !(actual = Q.remove()).estado.equals(finall.estado) ) { if(v.contains(actual.estado)) continue; System.out.println(actual.estado+" "+actual.costo_hasta_aqui+" "+actual.costo_total); System.out.println("->\n"+((NodeCubo)actual).getValue() ); v.add(actual.estado); int ca = actual.costo_hasta_aqui + 1; //Realiza Movimientos for( int i=0; i<12; i++ ){ aux = mano.girar( ((Cubo)actual.getValue()).getCubo(), i); Node nuevo = new NodeCubo(ca, ca+Heuristica.h1((Cubo)actual.getValue()), new Cubo( aux, ((Cubo)inicial.getValue()).getColors() ) ); Q.add( (Node)nuevo ); } cont++; } return cont; }