Algoritmo de Ford-Bellman
Vamos receber um grafo ponderado direcionado G com n vértices e m arestas, e algum vértice inicial v . É necessário encontrar os comprimentos dos caminhos mais curtos do vértice v para todos os outros vértices. 
 
Como Dijkstra, Ford-Bellman procura a distância do vértice 1 a todos os outros, mas trabalha com arestas negativas forte>. 
 
O próprio algoritmo de Ford-Bellman consiste em várias fases ( n-1). A cada fase, todas as arestas do grafo são examinadas, e o algoritmo tenta relaxar ao longo de cada aresta  (a, b) do custo  c.  Relaxamento ao longo de uma borda — esta é uma tentativa de melhorar o significado de  d[a]  o valor  d[b] + c. Na verdade, isso significa que estamos tentando melhorar a resposta para o vértice usando a aresta  e a resposta atual para o topo.
 
O array  d é um array dos menores comprimentos do vértice inicial, assim como em Dijkstra, inicialmente o preenchemos com os maiores números possíveis, exceto para o vértice inicial, no qual você precisa colocar 0. 
Para armazenar arestas, não é utilizada uma matriz de adjacência ou uma matriz de peso, mas uma lista que indica de qual nó a aresta sai ( from), para onde ela vem ( to code>) e seu peso (custo). 
 
borda da estrutura {
int de, para, custo;
};
vetor<borda> arestas;
 
A constante INF denota o número "infinito" - deve ser escolhido de forma que obviamente exceda todos os comprimentos de caminho possíveis. 
A implementação mais simples do algoritmo:
 
d[v] = 0;
  for (int i=0; i<n-1; ++i)
    para (int j=0; j<m; ++j)
     if (d[bordas[j].de] <INF)
       d[bordas[j].to] = min(d[bordas[j].to], d[bordas[j].de] + arestas[j].custo);
 
 
ou um pouco mais curto usando a sintaxe  C++11:
 
 
d[v] = 0;
for (int i=0; i< n-1; ++i)
  para (aresta j: arestas)
    if (d[j.from] <INF)
d[j.to] = min(d[j.to], d[j.de] + j.custo);
 
Exemplo de trabalho
  
 
Pegue um gráfico direcionado simples  com 5 nós, 4 arestas com peso igual a 1. 
 
Vamos apresentar uma lista de arestas nessa ordem. 
4 5 1 
3 4 1 
2 3 1 
1 2 1 
 
Valores iniciais na matriz de comprimentos mais curtos: 
 
 
onde inf deve ser um inteiro correspondente que é sempre maior que o peso da aresta. 
 
Após a 1ª passagem 
 
 
Após a 2ª passagem 
 
 
Após a 3ª passagem 
 
 
 
Após a 4ª passagem 
 
 
Se alimentarmos as arestas de 1 a 1, poderemos encontrar os comprimentos mais curtos após a 1ª passagem. 
 
  
            
            
                  
            
             
                    
            
                 
      
                  
           |