Ejercicio de TDijkastra

Run Settings
LanguagePython
Language Version
Run Command
import heapq # Definición del grafo como diccionario de adyacencias grafo = { 'A': {'B': 30, 'C': 90}, 'B': {'C': 72, 'D': 30, 'E': 48}, 'C': {'D': 120, 'F': 150, 'G': 180}, 'D': {'E': 100, 'G': 60}, 'E': {'F': 150}, 'F': {'G': 72}, 'G': {} } def dijkstra(grafo, inicio, fin): # Inicializamos la cola de prioridad con el nodo inicial y distancia 0 cola, distancias, camino = [(0, inicio)], {inicio: 0}, {} # Procesamos los nodos en la cola de prioridad while cola: distancia, nodo = heapq.heappop(cola) if nodo == fin: # Si alcanzamos el nodo destino, terminamos break # Recorremos los vecinos del nodo actual for vecino, peso in grafo[nodo].items(): nueva_dist = distancia + peso # Calculamos la nueva distancia # Si encontramos una ruta más corta hacia el vecino if nueva_dist < distancias.get(vecino, float('inf')): distancias[vecino], camino[vecino] = nueva_dist, nodo # Actualizamos distancia y predecesor heapq.heappush(cola, (nueva_dist, vecino)) # Añadimos el vecino a la cola # Reconstruimos la ruta óptima desde el nodo destino hacia el inicio ruta, paso = [], fin while paso: ruta.insert(0, paso) # Insertamos el nodo al inicio de la ruta paso = camino.get(paso) # Retrocedemos usando el diccionario de predecesores # Devolvemos la distancia mínima y la ruta return distancias.get(fin, float('inf')), ruta # Ejecución del algoritmo para encontrar el camino más corto desde A hasta G costo, ruta = dijkstra(grafo, 'A', 'G') print("Costo mínimo:", costo) print("Ruta más corta:", " -> ".join(ruta))
Editor Settings
Theme
Key bindings
Full width
Lines