org.jgrapht.alg.shortestpath

## Class YenKShortestPath<V,E>

• Type Parameters:
V - the graph vertex type
E - the graph edge type
All Implemented Interfaces:
KShortestPathAlgorithm<V,E>

public class YenKShortestPath<V,E>
extends Object
implements KShortestPathAlgorithm<V,E>
Implementation of Yen`s algorithm for finding $k$ shortest loopless paths.

The time complexity of the algorithm is $O(kn(m + n log n))$, where $n$ is the amount of vertices in the graph, $m$ is the amount of edges in the graph and $k$ is the amount of paths needed.

The algorithm is originally described in: Q. V. Martins, Ernesto and M. B. Pascoal, Marta. (2003). A new implementation of Yen’s ranking loopless paths algorithm. Quarterly Journal of the Belgian, French and Italian Operations Research Societies. 1. 121-133. 10.1007/s10288-002-0010-2.

The implementation iterates over the existing loopless path between the source and the sink and forms the resulting list. During the execution the algorithm keeps track of how many candidates with minimum weight exist. If the amount is greater or equal to the amount of path needed to complete the execution, the algorithm retrieves the rest of the path from the candidates heap and adds them to the resulting list.

Author:
Semen Chudakov
YenShortestPathIterator
• ### Constructor Detail

• #### YenKShortestPath

public YenKShortestPath(Graph<V,E> graph)
Constructs an instance of the algorithm for the given graph.
Parameters:
graph - graph
• ### Method Detail

• #### getPaths

public List<GraphPath<V,E>> getPaths(V source,
V sink,
int k)
Computes k shortest loopless paths between source and sink. If the overall number of such paths is denoted by $n$, the method returns $m = min\{k, n\}$ such paths. The paths are produced in sorted order by weights.
Specified by:
getPaths in interface KShortestPathAlgorithm<V,E>
Parameters:
source - the source vertex
sink - the target vertex
k - the number of shortest paths to return
Returns:
a list of k shortest paths