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