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