V - the graph vertex typeE - the graph edge typepublic class JohnsonShortestPaths<V,E> extends Object
Finds the shortest paths between all pairs of vertices in a sparse graph. Edge weights can be negative, but no negative-weight cycles may exist. It first executes the Bellman-Ford algorithm to compute a transformation of the input graph that removes all negative weights, allowing Dijkstra's algorithm to be used on the transformed graph.
Running time is $O(n m + n^2 \log n)$.
Since Johnson's algorithm creates additional vertices, this implementation requires the user to provide a graph which is initialized with a vertex supplier.
 In case the algorithm detects a negative weight cycle it will throw an exception of type
 NegativeCycleDetectedException which will contain the detected negative weight cycle.
ShortestPathAlgorithm.SingleSourcePaths<V,E>| Modifier and Type | Field and Description | 
|---|---|
protected Graph<V,E> | 
graph
The underlying graph. 
 | 
protected static String | 
GRAPH_CONTAINS_A_NEGATIVE_WEIGHT_CYCLE
Error message for reporting the existence of a negative-weight cycle. 
 | 
protected static String | 
GRAPH_MUST_CONTAIN_THE_SINK_VERTEX
Error message for reporting that a sink vertex is missing. 
 | 
protected static String | 
GRAPH_MUST_CONTAIN_THE_SOURCE_VERTEX
Error message for reporting that a source vertex is missing. 
 | 
| Constructor and Description | 
|---|
JohnsonShortestPaths(Graph<V,E> graph)
Construct a new instance. 
 | 
JohnsonShortestPaths(Graph<V,E> graph,
                    double epsilon)
Construct a new instance. 
 | 
| Modifier and Type | Method and Description | 
|---|---|
protected GraphPath<V,E> | 
createEmptyPath(V source,
               V sink)
Create an empty path. 
 | 
GraphPath<V,E> | 
getPath(V source,
       V sink)
Get a shortest path from a source vertex to a sink vertex. 
 | 
ShortestPathAlgorithm.SingleSourcePaths<V,E> | 
getPaths(V source)
Compute all shortest paths starting from a single source vertex. 
 | 
double | 
getPathWeight(V source,
             V sink)
Get the weight of the shortest path from a source vertex to a sink vertex. 
 | 
protected static final String GRAPH_CONTAINS_A_NEGATIVE_WEIGHT_CYCLE
protected static final String GRAPH_MUST_CONTAIN_THE_SOURCE_VERTEX
protected static final String GRAPH_MUST_CONTAIN_THE_SINK_VERTEX
protected final Graph<V,E> graph
public JohnsonShortestPaths(Graph<V,E> graph)
graph - the input graphpublic GraphPath<V,E> getPath(V source, V sink)
source - the source vertexsink - the target vertexIllegalArgumentException - in case the provided vertex factory creates vertices which
         are already in the original graphNegativeCycleDetectedException - in case a negative weight cycle is detectedpublic double getPathWeight(V source, V sink)
Double.POSITIVE_INFINITY if no path exists.getPathWeight in interface ShortestPathAlgorithm<V,E>source - the source vertexsink - the sink vertexDouble.POSITIVE_INFINITY if no path existsIllegalArgumentException - in case the provided vertex factory creates vertices which
         are already in the original graphpublic ShortestPathAlgorithm.SingleSourcePaths<V,E> getPaths(V source)
getPaths in interface ShortestPathAlgorithm<V,E>source - the source vertexIllegalArgumentException - in case the provided vertex factory creates vertices which
         are already in the original graphNegativeCycleDetectedException - in case a negative weight cycle is detectedprotected final GraphPath<V,E> createEmptyPath(V source, V sink)
source - the source vertexsink - the sink vertexCopyright © 2018. All rights reserved.