/** * Pone una arista en el grafo que incidirá en los vértices idOrigen y idDestino. Si ya hay una, * la sustituye. * * @param idOrigen Identificador de un vértice. * @param idDestino Identificador de un vértice. * @param arista Arista que se va a añadir al grafo. */ private void ponerArista(int idOrigen, int idDestino, Arista arista) throws IllegalArgumentException { if (!(this.existeIdVertice(idOrigen) && this.existeIdVertice(idDestino))) { throw new IllegalArgumentException("Error al poner una arista: algún vértice no existe."); } if (idOrigen == idDestino) { throw new IllegalArgumentException( "Error al poner una arista: deben ser identificadores diferentes."); } if (!this.adyacentes(idOrigen, idDestino)) { this.aumentarGrado(idOrigen); this.aumentarGrado(idDestino); } // Actualizar matriz de adyacencia arista.modificarOrigen(idOrigen); arista.modificarDestino(idDestino); this.matrizAdyacencias.get(idOrigen).set(idDestino, arista); Arista inv = new Arista(arista); inv.modificarOrigen(idDestino); inv.modificarDestino(idOrigen); this.matrizAdyacencias.get(idDestino).set(idOrigen, inv); // Actualizar listas de adyacencias ArrayList<Vertice<T>> listAdyOri = this.listasAdyacencias.get(idOrigen); ArrayList<Vertice<T>> listAdyDest = this.listasAdyacencias.get(idDestino); Vertice origen = this.vertice(idOrigen); Vertice destino = this.vertice(idDestino); if (!listAdyOri.contains(destino)) { listAdyOri.add(destino); } if (!listAdyDest.contains(origen)) { listAdyDest.add(origen); } this.nAristas++; }
/** * Devuelve cierto si las aristas conectan todos los vértices del grafo. Falso en caso contrario. * * @param aristas Las aristas. * @return Cierto si las aristas conectan todos los vértices del grafo. Falso en caso contrario. */ public boolean conectaTodosVertices(ArrayList<Arista> aristas) throws IllegalArgumentException { ArrayList<Vertice> V = new ArrayList<>(); int visitados = 0; for (int i = 0; i < aristas.size() && visitados < this.nVertices; i++) { Arista a = aristas.get(i); if (a == null) { throw new IllegalArgumentException( "Error al comprobar arista: referencia nula a la arista."); } int idOrigen = a.origen(); int idDestino = a.destino(); if (idOrigen == idDestino) { throw new IllegalArgumentException( "Error al comprobar arista: la arista tiene el mismo origen y destino."); } if (!(this.existeIdVertice(idOrigen) && this.existeIdVertice(idDestino))) { throw new IllegalArgumentException("Error al comprobar arista: algún vértice no existe."); } Vertice v1 = this.vertice(idOrigen); Vertice v2 = this.vertice(idDestino); if (!V.contains(v1)) { V.add(v1); visitados++; } if (!V.contains(v2)) { V.add(v2); visitados++; } } return visitados == this.nVertices; }
public int CalcularTiempoDeInfeccion(Grafo<String> grafo, Vertice<String> in) { int nuevaDist = 0; int maxDist = 0; int n = grafo.listaDeVertices().tamanio(); int[] distancias = new int[n]; ColaGenerica<Vertice<String>> q = new ColaGenerica<Vertice<String>>(); for (int c = 0; c < n; c++) { distancias[c] = Integer.MAX_VALUE; } distancias[in.posicion()] = 0; q.encolar(in); while (!q.esVacia()) { Vertice<String> v = q.desencolar(); nuevaDist = distancias[v.posicion()] + 1; ListaGenerica<Arista<String>> ady = grafo.listaDeAdyacentes(v); ady.comenzar(); while (!ady.fin()) { Arista<String> a = ady.proximo(); if (distancias[a.verticeDestino().posicion()] == Integer.MAX_VALUE) { q.encolar(a.verticeDestino()); distancias[a.verticeDestino().posicion()] = nuevaDist; if (nuevaDist > maxDist) { maxDist = nuevaDist; } } } } return maxDist; }
@SuppressWarnings("SleepWhileHoldingLock") @Override public void run() { for (Arista actual : arbol.aristasB) { try { actual.marcar(lienzo.getGraphics()); sleep(arbol.getVel()); } catch (InterruptedException ex) { ex.printStackTrace(); } } try { sleep(100); } catch (InterruptedException ex) { } arbol.aristasB.clear(); dialog(c[0], c[1]); }
/** * Pone una arista en el grafo que incidirá en los vértices arista.origen() y arista.destino(). Si * ya hay una, la sustituye. * * @param arista Arista que se va a añadir al grafo. */ public void ponerArista(Arista arista) throws IllegalArgumentException { if (!(this.existeIdVertice(arista.origen()) && this.existeIdVertice(arista.destino()))) { throw new IllegalArgumentException("Error al poner una arista: algún vértice no existe."); } if (arista.origen() == arista.destino()) { throw new IllegalArgumentException( "Error al poner una arista: deben ser identificadores diferentes."); } this.ponerArista(arista.origen(), arista.destino(), arista); }