Example #1
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;
    }
  }