Pela subestrutura ótima nossa recorrência terá dois parâmetros: - número i máximo de arestas no caminho mínimo - vértice v destino do caminho e escolherá o mínimo entre dois casos: 1) caminho mínimo até o próprio vértice destino v, mas com número máximo de arestas i-1 2) caminho mínimo com no máximo i-1 arestas até um vizinho de v que tenha aresta incidindo nele - note que, não sabemos de qual vizinho virá o melhor caminho, por isso temos que verificar todos - sendo \delta_in(v) o conjunto de arestas incidindo (entrando) no vértice v - o caso 2 na verdade são |\delta_in(v)| casos, um para cada uma dessas arestas Desse modo, para todo v em V e i em {1, 2, ...}, nossa recorrência fica assim A[i, v] = min { A[i-1, v] , min_{(w,v) \in E} {A[i-1, w] + c(w,v) } } - sendo que o primeiro termo do mínimo externo corresponde ao caso 1 - e o segundo termo (o mínimo interno) corresponde ao caso 2 A princípio não definimos para quantos valores de i vamos ter de calcular a recorrência - no entanto, note que se não temos circuitos negativos sempre temos caminhos mínimos com no máximo n-1 arestas - isso porque qualquer caminho com n ou mais arestas tem que repetir vértices - e, portanto, forma pelo menos um circuito - como os circuitos são não negativos, o mesmo pode ser removido do caminho e o custo desse não piora - assim, basta calcularmos nossa recorrência para i variando de 1 até n-1 para encontrar todos o caminhos mínimos