The description of the original algorithm could be found in the paper, 'A New Implementation Of Yen's Ranking Loopless Paths Algorithm' (http://citeseer.ist.psu.edu/martins00new.html).
Yen’s algorithm is one of derivation algorithms for ranking the K shortest paths between a pair of nodes[1]. It always searches the shortest paths in a “pseudo”-tree containing K shortest loopless paths. The very shortest one is obtained in the first place, and the second shortest path is always explored on the basis of the shortest paths that are shorter. In our paper, we exploit the implementation of Yen’s algorithm in [1]. Compared with the straightforward implementation of Yen’s algorithm, the one present in [1] is proved to have a better performance in computational experiments, although the complexity of them are the same, O(Kn(m+nlogn)) in the worst case analysis.
The package contains the implementation of Yen's algorithm for top-k shortest paths in a directed weighted graph.
Note that:
[1]: M. Pascoal and E. Martins. A new implementation of Yen’s ranking loopless paths algorithm. 4OR – Quarterly Journal of the Belgian, French and Italian Operations Research Societies, 2003.
[2]: A Fortran implementation: http://www.mat.uc.pt/~eqvm/OPP/KSPP/KSPP.html.
In the latest version of Java implementation, we allow to obtain shortest paths in two ways.
In the batch mode, the user can set the number of shortest paths that he/she wants, and all results can be obtained at a time.
For example:
Graph graph = new VariableGraph("data/test_7");
YenTopKShortestPathsAlg yenAlg = new YenTopKShortestPathsAlg(graph);
List<Path> shortest_paths_list = yenAlg.get_shortest_paths(
graph.get_vertex(0), graph.get_vertex(2), 100);
In this mode, the user can access paths between any pair of nodes in the graph, in increasing order.
Graph graph = new VariableGraph("data/test_7");
YenTopKShortestPathsAlg yenAlg = new YenTopKShortestPathsAlg(
graph, graph.get_vertex(0), graph.get_vertex(2));
while(yenAlg.has_next())
{
Path cur_result = yenAlg.next();
...
}
The algorithm presented in the paper "A new implementation of Yen’s ranking loopless paths algorithm", is not correct in all graphs.