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.
Eppstein REF solved the k shortest paths problem for directed graphs with nonnegative edge weights in O(m + n log n + k) time.
Finding the k Shortest Paths
SIAM J. Comput.
Mathematics Computer Science