Esempio n. 1
0
  /**
   * Constructor copia.
   *
   * @param original Grafo que va a ser copiado.
   */
  public Grafo(Grafo original) {
    this();

    this.nAristas = original.nAristas;
    this.nVertices = original.nVertices;

    int n = original.nVertices;
    // Copiamos matriz de adyacencias
    for (int i = 0; i < n; i++) {
      Vertice v = new Vertice<>(original.vertices.get(i));
      Integer grado = new Integer((int) original.grados.get(i));
      if (i == 0) {
        this.vertices.set(0, v);
        this.grados.set(0, grado);
      } else {
        this.vertices.add(v);
        this.grados.add(grado);
        this.matrizAdyacencias.add(new ArrayList<Arista<N>>());
      }

      for (int j = 0; j < n; j++) {
        Arista a = null;
        if (i != j && original.adyacentes(i, j)) {
          a = new Arista(original.arista(i, j));
        }
        if (i == 0 && j == 0) {
          this.matrizAdyacencias.get(0).set(0, a);
        } else {
          this.matrizAdyacencias.get(i).add(a);
        }
      }
    }
    // Copiamos listas de adyacencias
    for (int i = 0; i < this.nVertices; i++) {
      ArrayList<Vertice<T>> nuevaLista = new ArrayList<>();
      for (int j = 0; j < this.nVertices; j++) {
        if (i != j && this.adyacentes(i, j)) {
          nuevaLista.add(this.vertice(j));
        }
      }
      this.listasAdyacencias.put(i, nuevaLista);
    }
  }