shortest path problem
problem of finding a path between two vertices (or nodes) in a graph such that the sum of the weights of its constituent edges is minimized
Johnson's algorithm
algorithm to find shortest paths between all pairs of vertices in a sparse, edge-weighted (possibly negatively), directed graph; uses the Bellman–Ford algorithm to remove negative weights and Dijkstra’s algorithm on the rest