V
- the graph vertex typeE
- the graph edge typepublic class SuurballeKDisjointShortestPaths<V,E> extends Object
The algorithm is running k sequential Dijkstra iterations to find the shortest path at each step. Hence, yielding a complexity of k*O(Dijkstra).
For further reference see Wikipedia page
Modifier and Type | Field and Description |
---|---|
protected Graph<V,E> |
originalGraph |
protected Set<E> |
overlappingEdges |
protected List<List<E>> |
pathList |
protected Graph<V,E> |
workingGraph
Graph on which shortest paths are searched.
|
Constructor and Description |
---|
SuurballeKDisjointShortestPaths(Graph<V,E> graph)
Creates a new instance of the algorithm.
|
Modifier and Type | Method and Description |
---|---|
protected GraphPath<V,E> |
calculateShortestPath(V startVertex,
V endVertex)
Calculates the shortest paths for the current iteration.
|
List<GraphPath<V,E>> |
getPaths(V startVertex,
V endVertex,
int k)
Returns the $k$ shortest simple paths in increasing order of weight.
|
protected void |
transformGraph(List<E> previousPath)
Prepares the working graph for next iteration.
|
protected Graph<V,E> workingGraph
protected Set<E> overlappingEdges
protected Graph<V,E> originalGraph
public SuurballeKDisjointShortestPaths(Graph<V,E> graph)
graph
- graph on which shortest paths are searched.IllegalArgumentException
- if the graph is null.IllegalArgumentException
- if the graph is undirected.IllegalArgumentException
- if the graph is not simple.protected void transformGraph(List<E> previousPath)
calculateShortestPath(V, V)
call.previousPath
- the path found at the previous iteration.protected GraphPath<V,E> calculateShortestPath(V startVertex, V endVertex)
startVertex
- the start vertexendVertex
- the end vertexpublic List<GraphPath<V,E>> getPaths(V startVertex, V endVertex, int k)
getPaths
in interface KShortestPathAlgorithm<V,E>
startVertex
- source vertex of the calculated paths.endVertex
- target vertex of the calculated paths.k
- the number of shortest paths to returnIllegalArgumentException
- if the graph does not contain the startVertex or the
endVertexIllegalArgumentException
- if the startVertex and the endVertex are the same verticesIllegalArgumentException
- if the startVertex or the endVertex is nullCopyright © 2019. All rights reserved.