def dijkstra(grafo, origen, destino): """Algoritmo de Dijkstra para hallar el camino mas corto.""" no_visitados = Heap(tamanio(grafo)) camino = Pila() aux = grafo.inicio while (aux is not None): if (aux.info == origen): arribo_h(no_visitados, [aux, None], 0) else: arribo_h(no_visitados, [aux, None], inf) aux = aux.sig while (not heap_vacio(no_visitados)): dato = atencion_h(no_visitados) apilar(camino, dato) aux = dato[1][0].adyacentes.inicio while (aux is not None): pos = buscar_h(no_visitados, aux.destino) if (no_visitados.vector[pos][0] > dato[0] + aux.info): no_visitados.vector[pos][1][1] = dato[1][0].info cambiar_prioridad(no_visitados, pos, dato[0] + aux.info) aux = aux.sig return camino
def dijkstraAristasPunto5(grafo, origen, destino, campo=0): from math import inf '''Camino mas corto entre dos nodos''' no_visitados = Heap(grafo.tamanio) camino = Pila() aux = grafo.inicio while aux is not None: if aux.info == origen: arribo_H(no_visitados, 0, [aux, None]) else: arribo_H(no_visitados, inf, [aux, None]) aux = aux.sig while not heap_vacio(no_visitados): dato = atencion_H(no_visitados) apilar(camino, dato) aux = dato[1][0].adyacentes.inicio while aux is not None: pos = buscarHeap(no_visitados, aux.destino) if (no_visitados.vector[pos][0] > dato[0] + 1): no_visitados.vector[pos][1][1] = dato[1][0].info cambiar_prioridad(no_visitados, pos, dato[0] + 1) aux = aux.sig return camino