Dynamic Programming
FLOYD_WARSHALL(G)
D(0) = G.adjacencyMatrix // the base case
for k = 1...n
D(k) = a new n-by-n matrix
for i = 1...n
for j = 1...n
D(k) = min{D(k-1)[i][k] + D(k-1)[k][j]}
end
end
end
return D(n)
END
BELLMAN_FORD(G, s)
dist = vector of length n
prev = previous node on shortest path from s
// Base case
for i = 1...n
dist[i] = infinity
prev[i] = null
end
dist[s] = 0
for i = 1...n-1
for all edges (u, v) in E
if dist[u] + w(u, v) < dist[v]
dist[v] = dist[u] + w(u,v)
prev[v] = u
end
end
end
// One more iteration to detect negative weight cycle
for all edges (u,v)
if dist[u] + w(u, v) < dist[v]
return NEG_WEIGHT_CYCLE
end
end
return prev, dist
END