/** * Donat un tauler i una llista de enters et modifica el tauler ficant un BUIT a l’element de cada * casella que el seu valor no estigui a la llista de enters * * @param t * @param num_pre */ public static void eliminarnumeros(Tauler t, List<Integer> num_pre) { for (int i = 0; i < t.getTamany(); ++i) { for (int j = 0; j < t.getTamany(); ++j) { if (!num_pre.contains(t.getCasella(i, j).elem) && (t.getCasella(i, j).elem != -1)) { t.setCasella(i, j, 0, 0); } } } }
/** * Donat dos enters una Casella y dos taulers, t’emplena un tauler completament amb un cami vàlid * * @param k contador del Backtracking * @param final1 final del contador del Backtracking * @param actual Casella on estas * @param t Tauler per on es genera * @param fin Cuando completas t lo pasas a fin para devolsver el tablero completo * @return entero -1 si es para completar el tablero, 0 si es para volver por la recusividad */ public static int backtrackingmayorde8(int k, int final1, Casella actual, Tauler t, Tauler fin) { Random rnd = new Random(); if (k == final1 - 1) { fin.clone(t); // escriu(fin); return 0; } else { List<Casella> Adjacents = new ArrayList<Casella>(); t.getAdjacentslist(actual, Adjacents); while (!Adjacents.isEmpty() && !fin.he_acabat()) { // int p = numadjmespetit(Adjacents); // Collections.sort(Adjacents, new Casella()); ordenaAdjacents(Adjacents); // Collections.sort(Adjacents); int kaux = k + 1; Casella aux = Adjacents.get(0); Adjacents.remove(0); aux.elem = actual.elem + 1; Tauler taux = new Tauler(t.getTamany()); taux.clone(t); // escriu(taux); // escriu(t); taux.setCasella(aux.x, aux.y, aux.elem, t.getCasella(aux.x, aux.y).numadjlliures); // escriu(taux); // taux.print(); // System.out.print("\n"); if (taux.he_acabat()) backtrackingmayorde8(kaux, final1, aux, taux, fin); else if (!taux.esPartit()) { int auxret = backtrackingmayorde8(kaux, final1, aux, taux, fin); if (auxret == 0) return 0; } } return -1; } }