"""
TODO: Agregar comentarios de la función
"""
def Dijkstra(grafo, inicio, destino):
# Guarda el camino realiado desde la ciudad de inicio hasta la ciudad de destino
nodosPrevios = {}
distancias = {v: math.inf for v in list(nx.nodes(grafo))}
distancias[inicio] = 0
peso = 0
cola = []
cola.append(inicio)
while len(cola) != 0:
nodoActual = cola.pop(0)
# Itera sobre los nodos adjacentes del nodo Actual
for nodoAdjacente in dict(grafo.adjacency()).get(nodoActual):
path = distancias[nodoActual] + grafo.get_edge_data(nodoActual,nodoAdjacente).get('weight')
# Evalua si el nuevo camino es menor en peso al actual
if path < distancias[nodoAdjacente]:
# Actualiza el nuevo peso junto con el nodo al cual se pasa
distancias[nodoAdjacente] = path
nodosPrevios[nodoAdjacente] = nodoActual
cola.append(nodoAdjacente)
node = destino
path = []
peso = distancias[node]
while node != inicio:
path.append(node)
node = nodosPrevios[node]
path.append(node)
path.reverse()
return path, peso