#include <Bellman_Ford.H>
Métodos públicos | |
bool | operator() (GT &g, typename GT::Node *start_node, GT &tree) |
bool | has_negative_cycle (GT &g, typename GT::Node *s, Path< GT > &path) const |
Calcula un árbol abarcador de todos los caminos mínimos desde un nodo según el algoritmo de Bellman-Ford mejorado.
La clase utiliza el algoritmo mejorado de Bellman-Ford para calcular el árbol abarcador de todos los caminos mínimos desde un nodo de inicio.
El árbol abarcador resultante se mapea con el grafo original. De modo que una búsqueda de camino en profundidad, mediante find_path_depth_first() sobre el árbol, permite encontrar y construir cualquier camino mínimo desde el nodo de inicio hasta un nodo cualquiera.
Aunque el algoritmo de Bellman-Ford exhibe infierio desempeño que el de Dijkstra, el primero maneja pesos negativos y detecta la presencia de ciclos negativos. Es por tanto el algoritmo recomendado para la mayoría de aplicaciones de caminos s que manejen pesos negativos.
La clase se parametriza con las siguientes especificaciones:
|
inline |
Determina si existe o no un ciclo negativo. En caso afirmativo se calcula.
[in] | g | el grafo sobre el cual buscar el ciclo negativo. |
[in] | s | el nodo inicio desde el cual se desea calcular todos los caminos mínimos. |
[out] | path | camino donde se guarda el ciclo. |
|
inline |
Invoca al cálculo del árbol de caminos mínimos según el algoritmo de Bellman-Ford.
[in] | g | el grafo al cual se desea calcular el árbol abarcador mínimo. |
[in] | start_node | nodo inicio de los caminos mínimos. |
[out] | tree | el grafo donde se desea guardar el árbol abarcador resultado de todos los caminos mínimos que parten desde el nodo start_node. Este grafo es limpiado antes del comienzo del algoritmo. |
bad_alloc | si no hay suficiente memoria para construir tree; bien sea porque falla tree o por la cola interna. En este caso el valor de tree es indeterminado y no está limpio. |