/** * Retorna un Digraph que es la clausura transitiva de este DiGraph calculada usando el algoritmo * Roy-Warshal. * * <p>Este metodo no altera este grafo <i>this</i> * * @return un Digraph que es la clausura transitiva de este DiGraph calculada usando el algoritmo * Roy-Warshal */ public DiGraph royWarshall() { DiGraph ret = null; ret = (DiGraph) this.clone(); // Se agrega la identidad for (int i = 0; i < numNodes; ++i) { ret.addArc(i, i); } for (int k = 0; k < numNodes; ++k) { for (int i = 0; i < numNodes; ++i) { if ((i != k) && ret.isArc(i, k)) { for (int j = 0; j < numNodes; ++j) { if (ret.isArc(k, j)) { ret.addArc(i, j); } } } } } return ret; }