L'algorithme Ford-Bellman lui-même se compose de plusieurs phases (
n-1
). A chaque phase, toutes les arêtes du graphe sont examinées, et l'algorithme essaie de relaxer le long de chaque arête
(a, b)
du coût
c
.
Détente le long d'un bord — ceci est une tentative d'améliorer la signification de
d[a]
la valeur
d[b] + c
. En fait, cela signifie que nous essayons d'améliorer la réponse pour le sommet en utilisant l'arête et la réponse actuelle pour le haut.
Le tableau
d
est un tableau des longueurs les plus courtes à partir du sommet de départ, tout comme dans Dijkstra, nous le remplissons initialement avec le plus grand nombre possible, sauf pour le sommet de départ, dans lequel vous devez mettre 0.
Pour stocker les arêtes, ce n'est pas une matrice d'adjacence ou une matrice de poids qui est utilisée, mais une liste qui indique de quel nœud part l'arête (
from
), vers laquelle elle vient (
to code>) et son poids (coût
).
bord de la structure {
int de, à, coût ;
} ;
vecteur<bord> bords;
La constante INF
dénote le nombre "infini" - il doit être choisi de telle sorte qu'il dépasse évidemment toutes les longueurs de chemin possibles.