Algoritmo Ford-Bellman
Diamo un grafo pesato diretto G con n vertici e m archi, e alcuni vertici iniziali v . È necessario trovare le lunghezze dei percorsi più brevi dal vertice v a tutti gli altri vertici.
Come Dijkstra, Ford-Bellman cerca la distanza dal vertice 1 a tutti gli altri, ma lavora con bordi negativi< / forte>.
 
L'algoritmo Ford-Bellman stesso consiste in diverse fasi (
n-1). Ad ogni fase, vengono esaminati tutti gli archi del grafo e l'algoritmo cerca di rilassarsi lungo ogni arco 
(a, b) del costo 
c. 
Relax lungo un bordo — questo è un tentativo di migliorare il significato di 
d[a]  il valore 
d[b] + c. In effetti, questo significa che stiamo cercando di migliorare la risposta per il vertice utilizzando il bordo  e la risposta corrente per la parte superiore.
L'array 
d è un array delle lunghezze più brevi dal vertice iniziale, proprio come in Dijkstra, inizialmente lo riempiamo con i numeri più grandi possibili, ad eccezione del vertice iniziale, in cui devi inserire 0.
Per memorizzare gli spigoli non viene utilizzata una matrice di adiacenza o una matrice di peso, ma una lista che indica da quale nodo parte lo spigolo (
from), a quale arriva (
to code>) e il suo peso (cost).
 
struct bordo {
int da, a, costo;
};
vettore<bordo> bordi;
La costante INF denota il numero "infinito" - deve essere scelto in modo tale da superare ovviamente tutte le possibili lunghezze di percorso. 
L'implementazione più semplice dell'algoritmo:
d[v] = 0;
  per (int i=0; i<n-1; ++i)
    for (int j=0; j<m; ++j)
     if (d[edge[j].from] <INF)
       d[bordi[j].to] = min(d[bordi[j].to], d[bordi[j].da] + bordi[j].cost);
 
 
o un po' più breve usando la sintassi 
C++11:
 
d[v] = 0;
per (int i=0; i< n-1; ++i)
  per (bordo j: bordi)
    if (d[j.from] <INF)
d[j.to] = min(d[j.to], d[j.from] + j.cost);
Esempio di lavoro

Prendi un semplice grafico diretto  con 5 nodi, 4 spigoli con peso pari a 1.
Introduciamo un elenco di spigoli in quest'ordine.
4 5 1
3 4 1
2 3 1
1 2 1
Valori iniziali nell'array di lunghezze minime:
 
dove inf dovrebbe essere un numero intero corrispondente che è sempre maggiore del peso del bordo.
Dopo il 1° passaggio
 
Dopo il 2° passaggio
 
Dopo il 3° passaggio
 
Dopo il 4° passaggio
 
Se inseriamo i bordi nell'ordine dall'1 all'ultimo, potremmo trovare le lunghezze più corte dopo la prima passata.