Quick actions

cmd+k|ctrl+k

Navigation

Languages

ejercicio lista de adyasencia

Snippet info

Language

Python

Visibility

public

Author

emrb2309

Created

2024-10-30T17:50:02.670569Z

Updated

2024-10-30T18:12:06.413288Z

import heapq

class Grafo:
    def __init__(self):
        self.adj_list = {}

    def agregar_nodo(self, nodo):
        if nodo not in self.adj_list:
            self.adj_list[nodo] = []

    def agregar_arista(self, origen, destino, peso):
        self.adj_list[origen].append((destino, peso))
        self.adj_list[destino].append((origen, peso))  # Para grafos no dirigidos

    def dijkstra(self, inicio):
        distancias = {nodo: float('inf') for nodo in self.adj_list}
        distancias[inicio] = 0
        heap = [(0, inicio)]  # (distancia, nodo)

        while heap:
            dist_actual, nodo_actual = heapq.heappop(heap)

            if dist_actual > distancias[nodo_actual]:
                continue

            for vecino, peso in self.adj_list[nodo_actual]:
                nueva_distancia = dist_actual + peso

                if nueva_distancia < distancias[vecino]:
                    distancias[vecino] = nueva_distancia
                    heapq.heappush(heap, (nueva_distancia, vecino))

        return distancias

# Ejemplo de uso:
g = Grafo()

# Agregar nodos
for nodo in range(5):
    g.agregar_nodo(nodo)

# Agregar aristas (grafo no dirigido)
g.agregar_arista(0, 1, 2)
g.agregar_arista(0, 2, 3)
g.agregar_arista(1, 3, 4)
g.agregar_arista(2, 4, 5)
g.agregar_arista(3, 4, 1)

# Calcular distancias desde el nodo 0 usando Dijkstra
distancias = g.dijkstra(0)
print(distancias)
INFO