programacionI - Gonzalo Perrone

Run Settings
LanguagePython
Language Version
Run Command
import sys class Grafo: def __init__(self, num_nodos): self.num_nodos = num_nodos self.matriz_adyacencia = [[0] * num_nodos for _ in range(num_nodos)] self.nodos = {i: chr(65 + i) for i in range(num_nodos)} def agregar_arista(self, origen, destino, peso): if 0 <= origen < self.num_nodos and 0 <= destino < self.num_nodos: self.matriz_adyacencia[origen][destino] = peso def mostrar_matriz(self): print("Matriz de adyacencia:") for fila in self.matriz_adyacencia: print(fila) print() def dijkstra(self, inicio): distancias = [sys.maxsize] * self.num_nodos distancias[inicio] = 0 visitados = [False] * self.num_nodos predecesores = [-1] * self.num_nodos for _ in range(self.num_nodos): nodo_actual = min((dist for dist in range(self.num_nodos) if not visitados[dist]), key=distancias.__getitem__) visitados[nodo_actual] = True for vecino, peso in enumerate(self.matriz_adyacencia[nodo_actual]): if peso > 0 and not visitados[vecino] and distancias[nodo_actual] + peso < distancias[vecino]: distancias[vecino] = distancias[nodo_actual] + peso predecesores[vecino] = nodo_actual self.mostrar_resultado(distancias, predecesores, inicio) def mostrar_resultado(self, distancias, predecesores, inicio): print(f"Desde el nodo {self.nodos[inicio]}:") for destino in range(self.num_nodos): if destino != inicio: camino = self.construir_camino(predecesores, destino) print(f"Hasta {self.nodos[destino]}: {' -> '.join(camino)}, Costo: {distancias[destino]}") def construir_camino(self, predecesores, destino): camino = [] while destino != -1: camino.insert(0, self.nodos[destino]) destino = predecesores[destino] return camino # Ejemplo de uso grafo = Grafo(5) grafo.agregar_arista(0, 1, 10) grafo.agregar_arista(0, 4, 3) grafo.agregar_arista(1, 2, 2) grafo.agregar_arista(2, 3, 9) grafo.agregar_arista(4, 1, 4) grafo.agregar_arista(4, 2, 8) grafo.mostrar_matriz() grafo.dijkstra(0)
Editor Settings
Theme
Key bindings
Full width
Lines