/** * 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; }