def diametro(grafo): """Calcula el maximo camino minimo del grafo. Devuelve el camino: lista de vertices (Obj). Pre: El grafo existe. """ vertices = grafo.lista_de_vertices() maximo = 0 for i in xrange(len(vertices)): bfs = BFS(grafo, vertices[i]) for j in xrange(i+1, len(vertices)): distancia = bfs.distancia_a(vertices[j]) if distancia > maximo: maximo = distancia camino = bfs.camino_minimo(vertices[j]) return camino
def diametro(grafo): """Calcula el maximo camino minimo del grafo. Devuelve el camino: lista de vertices (Obj). Pre: El grafo existe. """ vertices = grafo.lista_de_vertices() maximo = 0 for i in xrange(len(vertices)): bfs = BFS(grafo, vertices[i]) for j in xrange(i + 1, len(vertices)): distancia = bfs.distancia_a(vertices[j]) if distancia > maximo: maximo = distancia camino = bfs.camino_minimo(vertices[j]) return camino
def centralidad(grafo, cantidad): """Calcula los vertices mas "populares"/"centrales" del grafo. Calculando los caminos minimos de todos los vertices contra todos los vertices (sin repetir), los vertices mas centrales son por los que pasan la mayor cantidad de caminos minimos. OBS: Los vertices raiz y destino de los caminos minimos no se cuentan en el camino que los une. Pre: El grafo existe. La cantidad es un entero mayor a 0. """ pasadas = {v:0 for v in grafo} vertices = grafo.lista_de_vertices() for i in xrange(len(vertices)): bfs = BFS(grafo, vertices[i]) for j in xrange(i+1, len(vertices)): # [1:-1] porque no cuenta la raiz y destino for v in bfs.camino_minimo(vertices[j])[1:-1]: pasadas[v] += 1 return _primeros_k_max(pasadas, cantidad)
def centralidad(grafo, cantidad): """Calcula los vertices mas "populares"/"centrales" del grafo. Calculando los caminos minimos de todos los vertices contra todos los vertices (sin repetir), los vertices mas centrales son por los que pasan la mayor cantidad de caminos minimos. OBS: Los vertices raiz y destino de los caminos minimos no se cuentan en el camino que los une. Pre: El grafo existe. La cantidad es un entero mayor a 0. """ pasadas = {v: 0 for v in grafo} vertices = grafo.lista_de_vertices() for i in xrange(len(vertices)): bfs = BFS(grafo, vertices[i]) for j in xrange(i + 1, len(vertices)): # [1:-1] porque no cuenta la raiz y destino for v in bfs.camino_minimo(vertices[j])[1:-1]: pasadas[v] += 1 return _primeros_k_max(pasadas, cantidad)