def punto2(): cola_prioridad = Heap(10) # a b y c trajes = [ 'Mark XLIV', 'Mark XV', 'Mark I', 'Mark V', 'Mark IV', 'Mark II', 'Mark VII' ] estado = ['Producir', 'Reparar'] pos = 0 for i in range(len(trajes)): arribo_heap(cola_prioridad, trajes[pos], randint(1, 3), choice(estado)) pos += 1 print() print('Se atiende los 3 primeros trajes') for i in range(3): print(atencion_heap(cola_prioridad)) print() print('Inserto 3 trajes nuevos(Mark XLV, XXL y III)') print() arribo_heap(cola_prioridad, 'Mark XLV', 3, 'Reparar') arribo_heap(cola_prioridad, 'Mark XXL', 2, 'Producir') arribo_heap(cola_prioridad, 'Mark III', 1, 'Reparar') while not heap_vacio(cola_prioridad): print(atencion_heap(cola_prioridad))
def kruskal(grafo): '''Algoritmo de Kruskal para hallar el árbol de expansión mínimo''' bosque = [] aristas = Heap(tamanio_grafo(grafo)**2) aux = grafo.inicio while aux is not None: bosque.append([aux.info]) adyac = aux.adyacentes.inicio while adyac is not None: arribo_heap(aristas, [aux.info, adyac.destino], adyac.info) adyac = adyac.sig aux = aux.sig while len(bosque) > 1 and not heap_vacio(aristas): dato = atencion_heap(aristas) origen = None for elemento in bosque: if dato[1][0] in elemento: origen = bosque.pop(bosque.index(elemento)) break destino = None for elemento in bosque: if dato[1][1] in elemento: destino = bosque.pop(bosque.index(elemento)) break if origen is not None and destino is not None: if len(origen) > 1 and len(destino) == 1: destino = [dato[1][0], dato[1][1]] elif len(destino) > 1 and len(origen) == 1: origen = [dato[1][0], dato[1][1]] elif len(destino) > 1 and len(origen) > 1: origen += [dato[1][0], dato[1][1]] bosque.append(origen + destino) else: bosque.append(origen) return bosque[0]
def prim(grafo): '''Algoritmo de Prim para hallar el árbol de expansión mínimo''' bosque = [] aristas = Heap(tamanio_grafo(grafo)**2) adyac = grafo.inicio.adyacentes.inicio while adyac is not None: arribo_heap(aristas, [grafo.inicio.info, adyac.destino], adyac.info) adyac = adyac.sig while len(bosque) // 2 < tamanio_grafo(grafo) and not heap_vacio(aristas): dato = atencion_heap(aristas) if len(bosque) == 0 or ((dato[1][0] not in bosque) ^ (dato[1][1] not in bosque)): bosque += dato[1] destino = buscar_vertice(grafo, dato[1][1]) adyac = destino.adyacentes.inicio while adyac is not None: arribo_heap(aristas, [destino.info, adyac.destino], adyac.info) adyac = adyac.sig return bosque
def dijkstra_red(grafo, origen, destino): '''Dijkstra para hallar el camino mas corto''' no_visitados = Heap(tamanio_grafo(grafo)) camino = Pila() aux = grafo.inicio while aux is not None: if aux.info.nombre == origen: arribo_heap(no_visitados, [aux, None], 0) else: arribo_heap(no_visitados, [aux, None], inf) aux = aux.sig while not heap_vacio(no_visitados): dato = atencion_heap(no_visitados) apilar(camino, dato) aux = dato[1][0].adyacentes.inicio while aux is not None: pos = busqueda_heap_red(no_visitados, aux.destino) if no_visitados.vector[pos][0] > dato[0] + aux.info: no_visitados.vector[pos][1][1] = dato[1][0].info.nombre cambiar_prioridad(no_visitados, pos, dato[0] + aux.info) aux = aux.sig return camino