Esempio n. 1
0
  /**
   * 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;
  }