示例#1
0
    /**
     * Expande el nodo generando sus posibles hijos. Sólo si el nodo es un nodo incompleto. Sólo se
     * generan los hijos que puedan llegar a ser factibles.
     *
     * @return Devuelve una lista con los nodos hijos del nodo.
     */
    public ArrayList<Nodo> generarHijos() {
      ArrayList<Nodo> hijos = new ArrayList<Nodo>(3);

      // Comprobamos si es posible obtener una solución factible.
      if (Math.abs(D - Math.abs(d)) <= N - k) {
        Nodo hijo1 = new Nodo(this);
        hijo1.k++;
        hijo1.calcularCotas();
        hijos.add(hijo1);

        if (n[k] <= T1 - t1) {
          Nodo hijo2 = new Nodo(this);
          hijo2.estado[hijo2.k] = 1;
          hijo2.d++;
          hijo2.t1 += n[hijo2.k];
          hijo2.k++;
          hijo2.calcularCotas();
          hijos.add(hijo2);
        }

        if (n[k] <= T2 - t2) {
          Nodo hijo3 = new Nodo(this);
          hijo3.estado[hijo3.k] = 2;
          hijo3.d--;
          hijo3.t2 += n[hijo3.k];
          hijo3.k++;
          hijo3.calcularCotas();
          hijos.add(hijo3);
        }
      }

      return hijos;
    }