Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)