We give algorithms for finding the k shortest paths (not required to be simple) connecting a pair of vertices in a digraph. Our algorithms output an implicit representation of these paths in a digraph with n vertices and m edges, in time O(m + n log n + k). We can also find the k shortest paths from a given source s to each vertex in the graph, in total time O(m + n log n + kn). We describe applications to dynamic programming problems including the knapsack problem, sequence alignment, maximum inscribed polygons, and genealogical relationship discovery.
The algorithm of Eppstein REF runs with an excellent complexity of O(m + n.log(n) + k.log(k)).
Finding the k Shortest Paths
SIAM J. Comput.
Mathematics Computer Science