Algoritmo de Dijkstra

Matemáticas Computacionales

02

Aviso Importante

Este es un material de apoyo no oficial, desarrollado por alumnos con la ayuda de inteligencia artificial. No representa la posición oficial de la institución ni de los profesores.
No cuestione ni moleste a los profesores sobre este contenido. El material está basado en apuntes tomados durante las clases e investigaciones complementarias hechas por los propios alumnos.
Este material puede contener imprecisiones. En caso de duda, consulte siempre el material oficial proporcionado por el profesor y las referencias al final.
Sugerencias y Correcciones
¿Encontraste un error o tienes una sugerencia? Envía tu contribución por el grupo de WhatsApp de la clase. Toda colaboración es bienvenida para mejorar el material para todos.
03
ÍNDICE

Contenido

04
INTRODUCCIÓN

Encontrando el Camino Más Corto

Imagina que necesitas viajar de Dublín a Cork. Hay muchas rutas posibles — algunas más rápidas, algunas más cortas, algunas más económicas en combustible. Este es un problema de búsqueda de caminos: dada una red de ubicaciones conectadas por carreteras, encontrar la "mejor" ruta de un punto a otro. "Mejor" puede significar menor tiempo, menor distancia, mayor ancho de banda o menor costo — todos estos son problemas de optimización.

Podemos modelar estas redes como grafos ponderados: las ubicaciones se convierten en nodos (también llamados vértices), las carreteras se convierten en aristas, y cada arista tiene un peso — un número que representa su costo (distancia, tiempo, etc.). Un algoritmo es simplemente una serie de instrucciones paso a paso para resolver un problema. El Algoritmo de Dijkstra (pronunciado "Dike-stra", en honor al científico de la computación holandés Edsger Dijkstra) es uno de los algoritmos más famosos para encontrar el camino más corto en un grafo ponderado.

El objetivo es simple: encontrar una secuencia de nodos conectando un nodo de origen a un nodo de destino que tenga el menor peso combinado de aristas. El enfoque de Dijkstra funciona explorando hacia afuera desde el nodo de origen, siempre eligiendo el vecino no visitado más cercano primero, y construyendo gradualmente una tabla de distancias más cortas conocidas. Cuando alcanza el destino, garantiza que el camino es óptimo.

05
DIAGRAMA

¿Por Qué Necesitamos un Algoritmo?

El enfoque de fuerza bruta no escala

Fuerza Bruta

Prueba todos los caminos posibles de A a H, calcula el costo total de cada uno y elige el más corto.

7 nodesCientos de caminos
100 nodesMillones de caminos
1,000 nodesMás caminos que átomos en el universo
Algoritmo de Dijkstra

Visita nodos de forma inteligente — siempre elige el nodo no visitado más cercano. Cada nodo se visita como máximo una vez.

7 nodes7 pasos
100 nodes~100 pasos
1,000 nodes~1.000 pasos
06
DIAGRAMA

Grafo Ponderado

El grafo que usaremos para rastrear el algoritmo de Dijkstra

21133652ABCDEFH

Cada número en una arista representa el costo de viajar entre dos nodos

07
DIAGRAMA

El Algoritmo

Cuatro pasos para encontrar el camino más corto

1Comienza en el nodo de origen. Establece su distancia en 0. Todas las demás distancias =
2Observa todos los vecinos no visitados. Calcula: distancia actual + peso de la arista
3Si la nueva distancia es menor, actualiza la tabla de distancias
4Marca el nodo actual como visitado. Ve al nodo no visitado con la menor distancia. Repite desde el paso 2
08
DIAGRAMA

Paso 0 — Comenzar en el Nodo A

Inicializar distancias y comenzar

We begin at node A with distance 0. All other nodes start at ∞ (infinity). From A, we can reach B (cost 2) and C (cost 1). We add both to our queue.
2 1 1 3 3 6 5 2 A0 B2 C1 D E F H
09
DIAGRAMA

Paso 1 — Visitar el Nodo C (costo 1)

C tiene la menor distancia en la cola

Node C has the smallest distance (1), so we visit it next. From C, we can reach D (1+3=4) and F (1+6=7). B is already queued with distance 2, which is still valid.
2 1 1 3 3 6 5 2 A0 B2 C1 D4 E F7 H
10
DIAGRAMA

Paso 2 — Visitar el Nodo B (costo 2)

B tiene la menor distancia entre los nodos no visitados

Node B (distance 2) is next. From B, we reach D (2+1=3) — this is shorter than D's current distance of 4! We update D to 3. We also reach E (2+3=5).
2 1 1 3 3 6 5 2 A0 B2 C1 D4→3 E5 F7 H
11
DIAGRAMA

Paso 3 — Visitar el Nodo D (costo 3)

Los vecinos de D ya fueron visitados — sin actualizaciones

Node D (distance 3) is next. Both of D's neighbours (B and C) are already visited. No distance updates — we simply mark D as visited and move on.
2 1 1 3 3 6 5 2 A0 B2 C1 D3 E5 F7 H
12
DIAGRAMA

Pasos 4 y 5 — Visitar E (costo 5), luego F (costo 7)

Acercándose a H

Node E (distance 5) is visited next. From E we check F: 5+5=10, but F already has distance 7, so no update. Then we visit F (distance 7). From F we reach H (7+2=9)!
2 1 1 3 3 6 5 2 A0 B2 C1 D3 E5 F7 H9
13
DIAGRAMA

Resultado — ¡Camino Más Corto Encontrado!

A → C → F → H con costo total 9

The algorithm is complete! The shortest path from A to H is A → C → F → H with total cost 9 (1 + 6 + 2). Notice this goes through C and F, not through B — even though B is closer to A, the path through B leads to a longer total route.
2 1 1 3 3 6 5 2 A0 C1 F7 H9 B2 D3 E5
14
DIAGRAMA

Ejemplo Resuelto 2 — Un Grafo Más Grande

Encontrando el camino más corto de S a T en un grafo de 7 nodos

New graph, same algorithm. This graph has 7 nodes and 11 edges — more complex than our first example. The edges from S reach three neighbours: A (cost 7), B (cost 2), and C (cost 3). Watch the algorithm explore outward from S.
72334411835S0ABCDET
15
DIAGRAMA

Ejemplo Resuelto 2 — Recorrido Animado

Observa a Dijkstra encontrar el camino de S a T

Watch the animation: The algorithm explores outward from S, visiting nodes in order of their distance. Notice how it discovers the path S → B → E → T (cost 6) — even though A and D are explored, they don't lead to a shorter path to T.
7 2 3 3 4 4 1 1 8 3 5 S A B C D E T 0 7 5 2 3 6 3 6 Shortest path: S → B → E → T (cost 6)
16
DIAGRAMA

Ejemplo Resuelto 2 — Recorrido por Columnas

Columnas paso a paso de S a T

Start at S
(cost 0)
SA: 0+7 = 7 NEW
SB: 0+2 = 2 NEW
SC: 0+3 = 3 NEW
→ Select B (2) 2
Visit B
(cost 2)
BD: 2+4 = 6 NEW
BE: 2+1 = 3 NEW
A: 7 2+3 = 5
→ Select C (3) 3
Visit C
(cost 3)
CB: 3+1 = 4 > 2 (no update)
CE: 3+8 = 11 > 3 (no update)
→ Select E (3) 3
Visit E
(cost 3)
ET: 3+3 = 6 NEW
→ Select A (5) 5
Visit A
(cost 5)
AD: 5+4 = 9 > 6 (no update)
→ Select D (6) 6
Visit D
(cost 6)
DT: 6+5 = 11 > 6 (no update)
→ Select T (6) 6
Shortest path: S → B → E → T, total cost = 6 (2 + 1 + 3)
17
DIAGRAMA

Ejemplo Resuelto 3 — Encontrando Todos los Caminos Más Cortos

A veces el viaje importa más que el destino

New goal: This time we find the shortest path from P to every node — not just one target. This is useful when you need to reach multiple destinations, like a delivery van planning its route.
14263512P0QRSTU
18
DIAGRAMA

Ejemplo Resuelto 3 — Ejecución Completa de Dijkstra

Encontrando los caminos más cortos de P a todos los nodos

All shortest paths found! Notice that every shortest path goes through Q and R — they're the 'gateway' nodes. This pattern is common in real networks: some nodes are more important than others for efficient routing.
1 4 2 6 3 5 1 2 P Q R S T U 0 1 4 3 7 6 8 7
DestinationShortest DistancePath
Q1P → Q
R3P → Q → R
S6P → Q → R → S
T8P → Q → R → T
U7P → Q → R → S → U
19
DIAGRAMA

Ejemplo Resuelto 3 — Recorrido por Columnas

Columnas paso a paso de P a todos los nodos

Start at P
(cost 0)
PQ: 0+1 = 1 NEW
PR: 0+4 = 4 NEW
→ Select Q (1) 1
Visit Q
(cost 1)
R: 4 1+2 = 3
QS: 1+6 = 7 NEW
→ Select R (3) 3
Visit R
(cost 3)
S: 7 3+3 = 6
RT: 3+5 = 8 NEW
→ Select S (6) 6
Visit S
(cost 6)
SU: 6+1 = 7 NEW
→ Select U (7) 7
Visit U
(cost 7)
(no unvisited neighbours)
→ Select T (8) 8
All shortest paths found from P: Q=1, R=3, S=6, U=7, T=8
20
DIAGRAMA

Recorrido Paso a Paso

Ejecutando Dijkstra de A a H — siguiendo el algoritmo

Start at A
(cost 0)
AB: 0+2 = 2 NEW
AC: 0+1 = 1 NEW
→ Select C (1) 1
Visit C
(cost 1)
AB: 2 (unchanged)
CD: 1+3 = 4 NEW
CF: 1+6 = 7 NEW
→ Select B (2) 2
Visit B
(cost 2)
4 2+1 = 3
BE: 2+3 = 5 NEW
CF: 7 (unchanged)
→ Select D (3) 3
Visit D
(cost 3)
BE: 5 (unchanged)
CF: 7 (unchanged)
(no new paths)
→ Select E (5) 5
Visit E
(cost 5)
CF: 7 (unchanged, 5+5=10 > 7)
→ Select F (7) 7
Visit F
(cost 7)
FH: 7+2 = 9 NEW
→ Select H (9) 9
Shortest path: A → C → F → H, total cost = 9 (1 + 6 + 2)
21
DIAGRAMA

Dijkstra vs A* — Comparación en Cuadrícula

Mismo mapa, mismo costo — pero mira cuántos nodos visita cada algoritmo

Qué observar: Ambos algoritmos encuentran un camino con el mismo costo. El sombreado púrpura/azul muestra qué nodos exploró cada algoritmo. Nota cómo Dijkstra (derecha) inunda toda la cuadrícula, mientras A* (izquierda) va directo hacia el objetivo — usa una heurística (distancia estimada al objetivo) para guiar su búsqueda.
Side-by-side comparison of Dijkstra and A* on a grid map

A* visitó 90 nodos. Dijkstra visitó 555 — más de 6 veces más. Video de Kevin Wang.

A* visitó 90 nodos. Dijkstra visitó 555 — más de 6 veces más. Video de Kevin Wang.

22
DIAGRAMA

Dijkstra vs A* — Comparación en el Mundo Real

Observa a Dijkstra explorar cada calle de Roma antes de encontrar el camino

Impacto en el mundo real: Este es Dijkstra ejecutándose en datos reales de calles de Roma, Italia (OpenStreetMap). Observa el brillo cian expandirse en todas las direcciones desde el origen — Dijkstra explora cada calle, callejón y callejón sin salida por igual. Tomó 21 minutos encontrar el camino. A* encontró exactamente el mismo camino en solo 2 minutos priorizando carreteras que llevan hacia el destino. Por eso los sistemas GPS modernos usan A* o algoritmos heurísticos similares, no Dijkstra puro.
Dijkstra vs A* pathfinding comparison on the streets of Rome

Dijkstra tardó 21:04 en encontrar el camino. A* encontró el mismo camino en solo 02:03. Video de Anthony Madorsky.

Dijkstra tardó 21:04 en encontrar el camino. A* encontró el mismo camino en solo 02:03. Video de Anthony Madorsky.

23
DIAGRAMA

Dijkstra vs A* — Entendiendo la Diferencia

Dos algoritmos, un objetivo — pero estrategias muy diferentes

Dijkstra’s Algorithm
  • Explores nodes in ALL directions equally
  • Guaranteed to find the shortest path
  • No knowledge of where the target is
  • Like a ripple spreading in a pond
  • Visits many unnecessary nodes
A* Algorithm
  • Explores towards the target first
  • Also guaranteed shortest path (with admissible heuristic)
  • Uses a heuristic — estimated distance to target
  • Like following a compass towards your destination
  • Visits far fewer nodes
The Key Difference: The Heuristic

A* adds one extra piece of information: an estimate of how far each node is from the target. Instead of picking the node with the smallest distance from start (like Dijkstra), A* picks the node with the smallest distance from start + estimated distance to target. This simple addition dramatically reduces the number of nodes explored.

FeatureDijkstraA*
Uses heuristic?NoYes
Finds shortest path?AlwaysYes (with admissible heuristic)
SpeedSlower (explores everything)Faster (focused search)
Memory usageHigherLower
Best forAll shortest paths from one sourceSingle source to single target
Used inNetwork routing, database queriesGPS navigation, video games
24
DIAGRAMA

Aplicaciones en el Mundo Real

Donde los algoritmos de camino más corto impulsan nuestra vida diaria

Navegación GPS

Every time you ask Google Maps or Apple Maps for directions, a variant of Dijkstra’s algorithm runs on millions of road segments. The edges are roads, weights are travel times (updated in real-time with traffic data), and the algorithm finds the fastest route. Modern GPS uses A* with geographical distance as the heuristic.

Enrutamiento de Internet

When you send a message on WhatsApp, it travels through multiple routers to reach its destination. Protocols like OSPF (Open Shortest Path First) use Dijkstra’s algorithm to find the fastest path through the network. Each router is a node, each connection is an edge weighted by latency or bandwidth.

Videojuegos

En juegos como Age of Empires, Civilization o cualquier juego de estrategia, las unidades necesitan navegar alrededor de obstáculos para llegar a su destino. A* es el algoritmo estándar de búsqueda de caminos en el desarrollo de juegos. Se ejecuta miles de veces por segundo para mover personajes, enemigos y NPCs por el mapa.

Redes Sociales

LinkedIn’s ‘degrees of connection’ and Facebook’s ‘People You May Know’ use graph algorithms to find short paths between users. The ‘six degrees of separation’ concept is essentially a shortest path problem on a social graph with billions of nodes.

25
CÓDIGO

Algoritmo de Dijkstra en Java

Usando una cola de prioridad para encontrar el camino más corto

DijkstraAlgorithm.java
import java.util.*;

public class DijkstraAlgorithm {
    
    // Find shortest distances from start to all nodes
    public static int[] dijkstra(int[][] graph, int start) {
        int n = graph.length;
        int[] distances = new int[n];
        boolean[] visited = new boolean[n];
        
        // Initialise all distances to "infinity"
        Arrays.fill(distances, Integer.MAX_VALUE);
        distances[start] = 0;
        
        // Priority queue: {distance, node}
        PriorityQueue<int[]> queue = 
            new PriorityQueue<>(Comparator.comparingInt(a -> a[0]));
        queue.offer(new int[]{0, start});
        
        while (!queue.isEmpty()) {
            int[] current = queue.poll();
            int dist = current[0], node = current[1];
            
            if (visited[node]) continue;
            visited[node] = true;
            
            // Check all neighbours
            for (int next = 0; next < n; next++) {
                if (graph[node][next] > 0 && !visited[next]) {
                    int newDist = dist + graph[node][next];
                    if (newDist < distances[next]) {
                        distances[next] = newDist;
                        queue.offer(new int[]{newDist, next});
                    }
                }
            }
        }
        return distances;
    }
}
Main.java
public class Main {
    public static void main(String[] args) {
        // Adjacency matrix — 0 means no direct connection
        //          A  B  C  D  E  F  H
        int[][] graph = {
            {0, 2, 1, 0, 0, 0, 0},  // A
            {2, 0, 0, 1, 3, 0, 0},  // B
            {1, 0, 0, 3, 0, 6, 0},  // C
            {0, 1, 3, 0, 0, 0, 0},  // D
            {0, 3, 0, 0, 0, 5, 0},  // E
            {0, 0, 6, 0, 5, 0, 2},  // F
            {0, 0, 0, 0, 0, 2, 0}   // H
        };
        String[] nodes = {"A","B","C","D","E","F","H"};
        
        int[] distances = DijkstraAlgorithm.dijkstra(graph, 0);
        
        // Print shortest distances from A
        for (int i = 0; i < nodes.length; i++) {
            System.out.println("A → " + nodes[i] + " = " + distances[i]);
        }
        // Output: A → H = 9
    }
}
26
RESUMEN

Referencia Rápida

ConceptoNotaciónSignificado
Nodo (Vértice)A, B, C...Un punto/ubicación en el grafo
AristaA—BUna conexión entre dos nodos
Pesow(A,B) = 3El costo de recorrer una arista
Grafo PonderadoG(V, E)Un grafo donde cada arista tiene un peso
Matriz de AdyacenciaM[i][j]Una tabla que almacena los pesos de las aristas entre todos los pares de nodos
Tabla de Distanciasd[v]Rastrea la menor distancia conocida a cada nodo
Camino Más CortoA → C → F → HLa secuencia de nodos con menor peso total
Cola de Prioridadmin-heapSelecciona el nodo no visitado con la menor distancia
27
EJERCICIOS

Ejercicios Prácticos

Pon a prueba tu comprensión del Algoritmo de Dijkstra

01
Easy — Encuentra el camino más corto de A a C en este grafo:

315ABC

¿Cuál es el costo total?
Compara el camino directo A→C con ir por B
02
Easy — Escribe la matriz de adyacencia para el grafo anterior (A, B, C con aristas A–B(3), B–C(1), A–C(5)).
Cada celda M[i][j] contiene el peso de la arista entre i y j, o 0 si no hay conexión directa
03
Medium — Ejecuta Dijkstra de S a T en este grafo:

4231618SABCT

Muestra la tabla de distancias después de cada paso e identifica el camino más corto.
Comienza en S. Tus primeras distancias son A=4 y B=2. ¿Cuál visitas primero?
04
Medium — Explain why Dijkstra’s Algorithm always selects the unvisited node with the smallest distance next. What would go wrong if we picked a random unvisited node instead?
Piensa en los pesos no negativos de las aristas y qué garantiza eso sobre el nodo seleccionado
05
Medium-Hard — Usando el grafo de la lección:

21133652ABCDEFH

Encuentra el camino más corto de A a E. Muestra tu razonamiento en cada paso.
El camino más corto a E puede no pasar por C — verifica ambas direcciones
06
Hard — Una empresa de entregas necesita encontrar la ruta más corta entre su almacén (W) y 4 tiendas. Distancias: W–S1(10), W–S2(5), S1–S2(3), S1–S3(1), S2–S3(8), S2–S4(2), S3–S4(4).

a) Ejecuta Dijkstra desde W para encontrar la menor distancia a cada tienda.
b) ¿Cuál es el camino más corto de W a S3?
c) Si la carretera W–S2 está cerrada por obras, ¿cuál es el nuevo camino más corto de W a S3?
Para la parte (c), elimina la arista W–S2 y ejecuta el algoritmo nuevamente
07
Code — Given the Java adjacency matrix below, what will Dijkstra’s Algorithm return as the shortest distance from node 0 to node 4?

int[][] graph = { {0, 6, 0, 1, 0}, {6, 0, 5, 2, 2}, {0, 5, 0, 0, 5}, {1, 2, 0, 0, 1}, {0, 2, 5, 1, 0} };
El nodo 3 está muy bien conectado — verifica caminos a través de él
08
Challenge — Dijkstra NO funciona con pesos negativos en las aristas. Considera: A→C(2), A→B(5), B→C(−10).

a) ¿Qué distancia reporta Dijkstra como la más corta de A a C?
b) ¿Cuál es la distancia más corta REAL?
c) ¿Por qué falla Dijkstra?
d) Nombra un algoritmo que maneje pesos negativos.
Una vez que Dijkstra visita un nodo, nunca lo reconsidera — incluso si una arista negativa después proporciona un camino más corto
09
Medium — Encuentra el camino más corto del nodo 1 al nodo 5 en este grafo:

311528112345

Muestra tu razonamiento paso a paso.
El nodo 3 es barato de alcanzar — explora sus vecinos con cuidado
10
Medium-Hard — Ejecuta Dijkstra de A a F:

42315162ABCDEF

Muestra cada paso del algoritmo e identifica el camino más corto.
Hay múltiples rutas a F — la más corta puede sorprenderte
11
Hard — Encuentra el camino más corto de S a T en este grafo de 7 nodos:

2547213413SABCDET

Aristas: S–A(2), S–B(5), A–C(4), A–E(7), B–D(2), B–E(1), C–T(3), D–T(4), E–C(1), E–D(3). Muestra tu razonamiento completo.
No te dejes tentar por el camino directo por A — verifica por B y E
12
Challenge — Una red tiene 8 enrutadores. Encuentra el camino más corto de R1 a R8:

36253142251R1R2R3R4R5R6R7R8

Aristas: R1–R2(3), R1–R3(6), R2–R4(2), R2–R5(5), R3–R5(3), R3–R6(1), R4–R7(4), R5–R7(2), R5–R6(2), R6–R8(5), R7–R8(1). Muestra la tabla de distancias completa en cada paso.
Hay muchas rutas posibles — sé metódico con tu tabla de distancias
28
RESPUESTAS

Respuestas

01
A → B → C, costo = 4
El camino más corto es A → B → C con costo 4 (3 + 1 = 4). El camino directo A → C cuesta 5, que es más caro.
02
Matriz de adyacencia 3×3
ABC
A035
B301
C510
03
S → B → A → C → T, costo = 7
Comenzar en S
(cost 0)
SA: 0+4 = 4 NEW
SB: 0+2 = 2 NEW
→ Select B (2) 2
Visitar B
(cost 2)
A: 4 2+1 = 3
BC: 2+6 = 8 NEW
→ Select A (3) 3
Visitar A
(cost 3)
C: 8 3+3 = 6
AT: 3+8 = 11 NEW
→ Select C (6) 6
Visitar C
(cost 6)
T: 11 6+1 = 7
→ Select T (7) 7
Camino más corto: S → B → A → C → T, total cost = 7 (2 + 1 + 3 + 1)
04
La estrategia voraz es segura porque los pesos no negativos significan que la menor distancia no puede mejorarse después.
La estrategia voraz de Dijkstra funciona porque todos los pesos de las aristas son no negativos. Cuando elegimos el nodo no visitado con la menor distancia, sabemos que su distancia es final — ningún camino futuro a través de otros nodos no visitados podría ser más corto (ya que sumar pesos no negativos solo aumenta el total). Si eligiéramos al azar, podríamos marcar un nodo como "terminado" antes de descubrir un camino más corto hacia él a través de otro nodo.
05
A → B → E, costo = 5
Comenzar en A
(cost 0)
AB: 0+2 = 2 NEW
AC: 0+1 = 1 NEW
→ Select C (1) 1
Visit C
(cost 1)
CD: 1+3 = 4 NEW
CF: 1+6 = 7 NEW
AB: 2 (sin cambios)
→ Select B (2) 2
Visit B
(cost 2)
D: 4 2+1 = 3
BE: 2+3 = 5 NEW
→ Select D (3) 3
Visit D
(cost 3)
(sin caminos nuevos)
→ Select E (5) 5
Camino más corto: A → B → E, total cost = 5 (2 + 3)
06
a) S1=8, S2=5, S3=9, S4=7 | b) W→S2→S1→S3 (costo 9) | c) W→S1→S3 (costo 11)

Parte a) Dijkstra desde W:

StepCurrentWS1S2S3S4
0W0105
1S2085137
2S4085117
3S108597
4S308597

Distancias más cortas: S1=8, S2=5, S3=9, S4=7

Parte b) Camino más corto de W a S3:

W → S2 → S1 → S3, cost = 5 + 3 + 1 = 9

Parte c) W–S2 cerrada:

Sin la arista W–S2, el único camino a S1 es directo (costo 10). Luego S1→S3 = 1. Entonces W → S1 → S3, costo = 10 + 1 = 11.

07
Camino más corto: 0 → 3 → 4, costo = 2
StepCurrent01234
00061
130312
2403712

Camino más corto: 0 → 3 → 4, costo = 2 (1 + 1). La matriz muestra que del nodo 0 al nodo 3 el peso es 1, y del nodo 3 al nodo 4 el peso es 1.

08
a) Dijkstra visita C primero (distancia 2, menor que B con 5), lo marca como visitado. Luego visita B (distancia 5), descubre B→C = 5+(−10) = −5, pero C ya está finalizado con 2. Dijkstra reporta A→C = 2.

b) El camino más corto real es A→B→C = 5 + (−10) = −5.

c) Dijkstra falla porque finaliza C con distancia 2 antes de descubrir el camino más barato por B. Una vez que un nodo se marca como visitado, nunca se reconsidera — la suposición voraz ("la menor distancia es final") se rompe cuando existen pesos negativos, porque sumar un peso negativo puede hacer que un camino más largo sea más corto.

d) El algoritmo de Bellman-Ford maneja pesos negativos relajando TODAS las aristas V−1 veces, garantizando que se encuentren todos los caminos más cortos.
a) Dijkstra reporta A→C = 4. Visita B primero (distancia 1), luego C (distancia 4). Nunca reconsidera C vía B.

b) Más corto real: A→B→C = 1 + (−5) = −4.

c) Dijkstra marca C como visitado con distancia 4 antes de descubrir el camino por B. Una vez visitados, los nodos nunca se reconsideran — esta es la suposición fundamental que se rompe con pesos negativos.

d) El algoritmo de Bellman-Ford maneja pesos negativos relajando todas las aristas V−1 veces, garantizando que se encuentren todos los caminos más cortos.
09
1 → 3 → 4 → 5, costo = 4
Animated Solution
311528112345d=0d=2d=1d=3d=4
Step-by-Step Calculation
Start at 1
(cost 0)
2: 0+3 = 3 NEW
3: 0+1 = 1 NEW
→ Select 3 (1) 1
Visit 3
(cost 1)
2: 31+1 = 2
4: 1+2 = 3 NEW
5: 1+8 = 9 NEW
→ Select 2 (2) 2
Visit 2
(cost 2)
4: 3 (2+5=7>3) (no change)
→ Select 4 (3) 3
Visit 4
(cost 3)
5: 93+1 = 4
→ Select 5 (4) 4
Shortest path: 1 → 3 → 4 → 5, total cost = 4 (1 + 2 + 1)
10
A → C → B → D → E → F, costo = 9
Animated Solution
42315162ABCDEFd=0d=3d=2d=6d=7d=9
Step-by-Step Calculation
Start at A
(cost 0)
B: 0+4 = 4 NEW
C: 0+2 = 2 NEW
→ Select C (2) 2
Visit C
(cost 2)
B: 42+1 = 3
E: 2+5 = 7 NEW
→ Select B (3) 3
Visit B
(cost 3)
D: 3+3 = 6 NEW
→ Select D (6) 6
Visit D
(cost 6)
E: 7 (6+1=7) (no change)
F: 6+6 = 12 NEW
→ Select E (7) 7
Visit E
(cost 7)
F: 127+2 = 9
→ Select F (9) 9
Shortest path: A → C → B → D → E → F, total cost = 9 (2 + 1 + 3 + 1 + 2)
11
S → A → C → T, costo = 9
Animated Solution
2547213413SABCDETd=0d=2d=5d=6d=7d=6d=9
Step-by-Step Calculation
Start at S
(cost 0)
A: 0+2 = 2 NEW
B: 0+5 = 5 NEW
→ Select A (2) 2
Visit A
(cost 2)
C: 2+4 = 6 NEW
E: 2+7 = 9 NEW
→ Select B (5) 5
Visit B
(cost 5)
D: 5+2 = 7 NEW
E: 95+1 = 6
→ Select C (6) 6
Visit C
(cost 6)
T: 6+3 = 9 NEW
→ Select E (6) 6
Visit E
(cost 6)
C: 6 (6+1=7>6) (no change)
D: 7 (6+3=9>7) (no change)
→ Select D (7) 7
Visit D
(cost 7)
T: 9 (7+4=11>9) (no change)
→ Select T (9) 9
Shortest path: S → A → C → T, total cost = 9 (2 + 4 + 3)
12
R1 → R2 → R4 → R7 → R8, costo = 10
Animated Solution
36253142251R1R2R3R4R5R6R7R8d=0d=3d=6d=5d=8d=7d=9d=10
Step-by-Step Calculation
Start at R1
(cost 0)
R2: 0+3 = 3 NEW
R3: 0+6 = 6 NEW
→ Select R2 (3) 3
Visit R2
(cost 3)
R4: 3+2 = 5 NEW
R5: 3+5 = 8 NEW
→ Select R4 (5) 5
Visit R4
(cost 5)
R7: 5+4 = 9 NEW
→ Select R3 (6) 6
Visit R3
(cost 6)
R5: 8 (6+3=9>8) (no change)
R6: 6+1 = 7 NEW
→ Select R6 (7) 7
Visit R6
(cost 7)
R5: 8 (7+2=9>8) (no change)
R8: 7+5 = 12 NEW
→ Select R5 (8) 8
Visit R5
(cost 8)
R7: 9 (8+2=10>9) (no change)
→ Select R7 (9) 9
Visit R7
(cost 9)
R8: 129+1 = 10
→ Select R8 (10) 10
Shortest path: R1 → R2 → R4 → R7 → R8, total cost = 10 (3 + 2 + 4 + 1)
29
REFERENCIAS

Referencias

Fuentes utilizadas en la elaboración de este material

01
A* (A Star) Search Algorithm — Computerphile
El Dr. Mike Pound explica A* usando Dijkstra como base, con ejemplos de grafos dibujados a mano
Consultado en: 24 marzo 2026
02
Pathfinding algorithm comparison: Dijkstra's vs. A*
Comparación visual de Dijkstra y A* en datos reales de OpenStreetMap (Roma y NYC)
Consultado en: 24 marzo 2026
03
Compare A* with Dijkstra algorithm
Comparación lado a lado de búsqueda de caminos en cuadrícula mostrando nodos visitados y costo
Consultado en: 24 marzo 2026
04
Dijkstra's Shortest Path Algorithm — Brilliant.org
Explicación interactiva del algoritmo de Dijkstra con visualizaciones paso a paso
Consultado en: 24 marzo 2026
05
DSA Dijkstra's Algorithm — W3Schools
Tutorial con ejemplos de código en múltiples lenguajes y visualizador interactivo de grafos
Consultado en: 24 marzo 2026