🔴 Bellman-Ford
Caminos más cortos con pesos negativos
Pasada 0 / 6
Origen: A
Configuración
Control
Estadísticas
Pasada / V−1
0 / 6
Estado
Listo
Relajadas en esta pasada
0
Total de relajaciones
0
Distancias
Referencia y teoría

El algoritmo de Bellman-Ford encuentra la distancia más corta desde un único nodo de origen hasta cualquier otro nodo en un grafo dirigido ponderado, y funciona incluso cuando algunos pesos de las aristas son negativos.

Relajación de una arista

Cada arista (u, v) con peso w se relaja repetidamente según la regla dist[v] = min(dist[v], dist[u] + w(u, v)). Si el camino a través de u es más corto que la mejor distancia conocida hasta v, esa distancia — y el predecesor de v — se actualizan.

Por qué bastan V−1 pasadas

El camino más corto que no repite nodos recorre como máximo V−1 aristas. Cada pasada completa por todas las aristas garantiza que al menos una arista más de cada camino más corto quede finalizada, de modo que tras V−1 pasadas todos los caminos más cortos (en ausencia de un ciclo negativo) se han propagado por completo.

La pasada adicional V

Ejecutar una pasada más tras las obligatorias V−1 comprueba si existen ciclos negativos: si alguna distancia todavía puede mejorar, existe un ciclo de peso negativo alcanzable desde el origen, y para sus nodos el camino más corto no está bien definido.

Complejidad

Bellman-Ford se ejecuta en O(V·E) tiempo y O(V) espacio. Esto es más lento que el algoritmo de Dijkstra (O((V+E) log V)), pero, a diferencia de este, Bellman-Ford tolera pesos negativos y puede detectar ciclos negativos — la elección voraz de Dijkstra deja de funcionar correctamente en cuanto aparece una arista negativa.

Acerca del algoritmo de Bellman-Ford

Autor: Equipo de MySimulator · Revisión editorial: Redacción de MySimulator

Actualizado: 11 de julio de 2026

El algoritmo de Bellman-Ford, desarrollado de forma independiente por Richard Bellman (1958) y Lester Ford Jr. (1956), calcula los caminos más cortos desde un único vértice de origen hasta cualquier otro vértice de un grafo dirigido ponderado. A diferencia del algoritmo de Dijkstra, tolera pesos de arista negativos, lo que lo hace imprescindible para aplicaciones como la detección de arbitraje de divisas y protocolos de enrutamiento de red como RIP. Bellman-Ford es un algoritmo de programación dinámica: relaja repetidamente cada arista — sustituyendo dist[v] por dist[u] + w(u,v) siempre que esa suma sea menor — durante exactamente V−1 pasadas, ya que el camino más corto simple más largo posible visita como máximo V−1 aristas. Una pasada final adicional comprueba si alguna distancia todavía puede mejorar; si es así, el grafo contiene un ciclo de peso negativo alcanzable desde el origen, lo que significa que no existe un camino más corto bien definido. Esto le da a Bellman-Ford una complejidad temporal de O(V·E) y espacial de O(V), más lenta que la O((V+E) log V) de Dijkstra, pero estrictamente más general.

Preguntas frecuentes

¿Por qué Bellman-Ford necesita V−1 pasadas?

Porque el camino más corto más largo posible en un grafo con V vértices (uno que no repite ningún vértice) puede tener como máximo V−1 aristas. Cada pasada completa por todas las aristas garantiza que al menos una arista más a lo largo de cada camino más corto queda finalizada, de modo que tras V−1 pasadas todas las distancias más cortas se han propagado por completo.

¿Cómo detecta Bellman-Ford los ciclos negativos?

Tras las V−1 pasadas obligatorias, el algoritmo ejecuta una pasada adicional sobre todas las aristas. Si alguna arista todavía puede relajarse — es decir, si una distancia aún disminuiría — debe existir un ciclo de peso negativo alcanzable desde el origen, ya que un árbol de caminos más cortos válido ya sería estable en ese punto.

¿Cómo se compara Bellman-Ford con el algoritmo de Dijkstra?

Ambos calculan caminos más cortos desde un único origen, pero Dijkstra usa una cola de prioridad voraz y requiere pesos no negativos, ejecutándose en O((V+E) log V). Bellman-Ford relaja cada arista en cada pasada, tolera pesos negativos y puede detectar ciclos negativos, a costa de un tiempo de ejecución más lento de O(V·E).

¿Puede Bellman-Ford manejar grafos no dirigidos con aristas negativas?

No. Cualquier arista no dirigida con peso negativo equivale a un ciclo negativo de dos vértices (u→v y v→u), por lo que Bellman-Ford la marcaría inmediatamente como un ciclo negativo. El algoritmo está diseñado para grafos dirigidos; los pesos negativos solo tienen sentido consistente cuando las aristas tienen una dirección.