Saltar al contenido principal
Interactive Algorithm Education

Visualize & Master Algorithms & Data Structures

Explore classic & modern sorting algorithms, efficient searching techniques, and interactive data structure visualizations — all with real-time step-by-step animation, comparisons, swaps, and Big-O metrics.

Graph Algorithms Visualizer

Dijkstra's Shortest Path

Time O((V + E) log V) · Space O(V)
Paso 0 / 0
Speed 100ms
Step Progress 0 / 0
Visited 0
Frontier 0
Status Ready
Unvisited
Start
Active
Visited
MST / SPT
Rejected
SCC component

Queue

Step Explanation

Select an algorithm and press Play to begin.

Pseudocode
 

Algoritmo de Dijkstra

Intermediate (3/5) ~1 hora Camino más corto desde una sola fuente Relajación de aristas Cola de prioridad (min-heap) Correctitud del algoritmo voraz Prereqs: BFS, Colas de prioridad / heaps
Quick Reference

Dijkstra's Algorithm

Dijkstra's algorithm finds the shortest paths from a source node to all other nodes in a weighted graph with non-negative edge weights using a min-priority queue.

Difficulty: Intermediate (3/5) graph

Complexity

Best Time
O((V + E) log V)
Average Time
O((V + E) log V)
Worst Time
O((V + E) log V)
Space
O(V)

When to Use

Use Dijkstra for shortest-path problems in weighted graphs with non-negative weights (GPS navigation, network routing, map services).

Pros

  • Finds shortest paths from source to all nodes
  • Efficient with a binary heap (E log V)
  • Optimal for non-negative edge weights

Cons

  • Fails with negative edge weights (use Bellman-Ford)
  • Requires priority queue overhead
  • Not single-pair optimized (visits many nodes)

History

Edsger W. Dijkstra conceived the algorithm in 1956 during a coffee break in Amsterdam and published it in 1959. It remains one of the most widely used shortest-path algorithms.

El algoritmo de Dijkstra responde “¿cuál es la forma más barata de llegar a cada nodo desde una fuente?” en un grafo ponderado — el motor detrás del enrutamiento GPS, enrutamiento OSPF y entrega de paquetes.

Funciona expandiendo vorazmente el nodo no visitado más cercano, usando una cola de prioridad mínima para siempre elegir el mejor nodo frontera. Su único requisito estricto: sin aristas de peso negativo.

Cómo Funciona

  1. Inicializa: establece dist[fuente] = 0, todos los demás ∞. Inserta la fuente en la cola de prioridad.
  2. Extrae el mínimo: elimina el nodo con la distancia conocida más pequeña de la cola de prioridad.
  3. Relaja aristas: para cada vecino, verifica si enrutar a través del nodo actual da un camino más corto. Si es así, actualiza su distancia y padre.
  4. Repite: hasta que la cola de prioridad esté vacía. Cada distancia extraída ahora es final.

Idea Clave

El paso voraz es válido precisamente porque los pesos de las aristas son no negativos: una vez que un nodo se extrae de la cola con su distancia mínima, ningún camino futuro (más largo) podría posiblemente mejorarlo. Esta es la análoga de camino más corto de la propiedad de corte.

La operación relax — “si dist[u] + w < dist[v], actualiza dist[v]” — es todo el motor. Todo lo demás solo decide el orden de las relajaciones: siempre la más prometedora primero.

Ejemplo Trabajado

Ejecuta Dijkstra en el grafo ponderado del visualizador, fuente S:

PasoExtraerDistancias actualizadas
1S (0)A=2, B=4
2A (2)C=5 (vía A), D=9 (vía A)
3B (4)D=5 (vía B, ¡mejor!)
4C (5)E=7 (vía C)
5D (5)E=7 se mantiene, T=11 (vía D)
6E (7)T=8 (vía E, ¡mejor!)
7T (8)hecho

Distancias más cortas: S=0, A=2, B=4, C=5, D=5, E=7, T=8. Observa que B→D mejora D de 9 a 5 después de que A ya fue procesado — Dijkstra re-relaja vecinos y la cola de prioridad corrige el orden. Observa la tabla de distancias en el visualizador actualizarse a medida que cada nodo se finaliza.

Casos Extremos y Trampas

  • “Aristas negativas — Dijkstra retorna respuestas incorrectamente silenciosamente: la extracción voraz es inválida. Usa Bellman-Ford.”
  • “Nodos desconectados — los nodos inalcanzables mantienen dist = ∞: reprórtalos como tales.”
  • Múltiples caminos más cortos — cualquiera es válido; los punteros padre reconstruyen uno de ellos.
  • Grafos densos — una cola simple basada en arreglo da O(V²), que supera a un heap cuando E ≈ V². La versión con heap O((V+E) log V) es mejor para grafos dispersos.

Comparación con Otros Algoritmos de Camino

AspectoDijkstraBellman-FordBFS
Pesos negativosNoSíN/A (no ponderado)
Desde una sola fuenteSíSíSí (solo aristas)
ComplejidadO((V+E) log V)O(VE)O(V+E)
Mejor cuandoNo negativo, dispersoAristas negativas / ciclosNo ponderado

Aplicaciones

  • Navegación GPS — camino más corto en carretera entre dos puntos
  • Enrutamiento de redes — protocolo OSPF
  • Servicios de mapas — tiempos de viaje y distancias
  • Logística — optimización de rutas de entrega
  • Redes sociales — cadenas de conexión más cortas

Trayectoria de Práctica

  1. Traza a mano Dijkstra en el grafo del visualizador comenzando en A, registrando la tabla de distancias cada ronda.
  2. Explica por qué extraer un nodo del min-heap finaliza su distancia dados pesos no negativos.
  3. Construye un grafo pequeño con una arista negativa y muestra dónde falla Dijkstra.
  4. Reconstruye el camino más corto de S a T usando punteros padre.
  5. Compara el comportamiento de Dijkstra en grafos dispersos vs densos y cuándo preferir O(V²).