java.lang.Object
org.jgrapht.graph.AbstractGraph<V,E>
org.jgrapht.graph.GraphDelegator<V,E>
org.jgrapht.graph.AsWeightedGraph<V,E>
- Type Parameters:
V
- the graph vertex typeE
- the graph edge type
- All Implemented Interfaces:
Serializable
,Graph<V,
E>
Provides a weighted view of a graph. The class stores edge weights internally.
All @link{getEdgeWeight} calls are handled by this view; all other graph operations are
propagated to the graph backing this view.
This class can be used to make an unweighted graph weighted, to override the weights of a weighted graph, or to provide different weighted views of the same underlying graph. For instance, the edges of a graph representing a road network might have two weights associated with them: a travel time and a travel distance. Instead of creating two weighted graphs of the same network, one would simply create two weighted views of the same underlying graph.
This class offers two ways to associate a weight with an edge:
- Explicitly through a map which contains a mapping from an edge to a weight
- Implicitly through a function which computes a weight for a given edge
- See Also:
-
Field Summary
Fields inherited from interface org.jgrapht.Graph
DEFAULT_EDGE_WEIGHT
-
Constructor Summary
ConstructorDescriptionAsWeightedGraph
(Graph<V, E> graph, Function<E, Double> weightFunction, boolean cacheWeights, boolean writeWeightsThrough) Constructor for AsWeightedGraph which uses a weight function to compute edge weights.Constructor for AsWeightedGraph where the weights are provided through a map.Constructor for AsWeightedGraph which allows weight write propagation to be requested explicitly. -
Method Summary
Modifier and TypeMethodDescriptiondouble
getEdgeWeight
(E e) Returns the weight assigned to a given edge.getType()
Get the graph type.void
setEdgeWeight
(E e, double weight) Assigns a weight to an edge.Methods inherited from class org.jgrapht.graph.GraphDelegator
addEdge, addEdge, addVertex, addVertex, containsEdge, containsVertex, degreeOf, edgeSet, edgesOf, getAllEdges, getDelegate, getEdge, getEdgeSource, getEdgeSupplier, getEdgeTarget, getVertexSupplier, incomingEdgesOf, inDegreeOf, outDegreeOf, outgoingEdgesOf, removeEdge, removeEdge, removeVertex, toString, vertexSet
Methods inherited from class org.jgrapht.graph.AbstractGraph
assertVertexExist, containsEdge, equals, hashCode, removeAllEdges, removeAllEdges, removeAllEdges, removeAllVertices, toStringFromSets
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.jgrapht.Graph
addEdge, addEdge, addVertex, addVertex, containsEdge, containsEdge, containsVertex, degreeOf, edgeSet, edgesOf, getAllEdges, getEdge, getEdgeSource, getEdgeSupplier, getEdgeTarget, getVertexSupplier, incomingEdgesOf, inDegreeOf, iterables, outDegreeOf, outgoingEdgesOf, removeAllEdges, removeAllEdges, removeAllVertices, removeEdge, removeEdge, removeVertex, setEdgeWeight, vertexSet
-
Constructor Details
-
AsWeightedGraph
Constructor for AsWeightedGraph where the weights are provided through a map. Invocations of the @link{setEdgeWeight} method will update the map. Moreover, calls to @link{setEdgeWeight} are propagated to the underlying graph.- Parameters:
graph
- the backing graph over which a weighted view is to be created.weights
- the map containing the edge weights.- Throws:
NullPointerException
- if the graph or the weights are null.
-
AsWeightedGraph
Constructor for AsWeightedGraph which allows weight write propagation to be requested explicitly.- Parameters:
graph
- the backing graph over which an weighted view is to be createdweights
- the map containing the edge weightswriteWeightsThrough
- if set to true, the weights will get propagated to the backing graph in thesetEdgeWeight()
method.- Throws:
NullPointerException
- if the graph or the weights are nullIllegalArgumentException
- ifwriteWeightsThrough
is set to true andgraph
is not a weighted graph
-
AsWeightedGraph
public AsWeightedGraph(Graph<V, E> graph, Function<E, Double> weightFunction, boolean cacheWeights, boolean writeWeightsThrough) Constructor for AsWeightedGraph which uses a weight function to compute edge weights. When the weight of an edge is queried, the weight function is invoked. IfcacheWeights
is set totrue
, the weight of an edge returned by theweightFunction
after its first invocation is stored in a map. The weight of an edge returned by subsequent calls to @link{getEdgeWeight} for the same edge will then be retrieved directly from the map, instead of re-invoking the weight function. IfcacheWeights
is set tofalse
, each invocation of the @link{getEdgeWeight} method will invoke the weight function. Caching the edge weights is particularly useful when pre-computing all edge weights is expensive and it is expected that the weights of only a subset of all edges will be queried.- Parameters:
graph
- the backing graph over which an weighted view is to be createdweightFunction
- function which maps an edge to a weightcacheWeights
- if set totrue
, weights are cached once computed by the weight functionwriteWeightsThrough
- if set totrue
, the weight set directly by the @link{setEdgeWeight} method will be propagated to the backing graph.- Throws:
NullPointerException
- if the graph or the weight function is nullIllegalArgumentException
- ifwriteWeightsThrough
is set to true andgraph
is not a weighted graph
-
-
Method Details
-
getEdgeWeight
Returns the weight assigned to a given edge. If weights are provided through a map, first a map lookup is performed. If the edge is not found, the @link{getEdgeWeight} method of the underlying graph is invoked instead. If, on the other hand, the weights are provided through a function, this method will first attempt to lookup the weight of an edge in the cache (that is, ifcacheWeights
is set totrue
in the constructor). If caching was disabled, or the edge could not be found in the cache, the weight function is invoked. If the function does not provide a weight for a given edge, the call is again propagated to the underlying graph.- Specified by:
getEdgeWeight
in interfaceGraph<V,
E> - Overrides:
getEdgeWeight
in classGraphDelegator<V,
E> - Parameters:
e
- edge of interest- Returns:
- the edge weight
- Throws:
NullPointerException
- if the edge is null
-
setEdgeWeight
Assigns a weight to an edge. IfwriteWeightsThrough
is set totrue
, the same weight is set in the backing graph. If this class was constructed using a weight function, it only makes sense to invoke this method whencacheWeights
is set to true. This method can then be used to preset weights in the cache, or to overwrite existing values.- Specified by:
setEdgeWeight
in interfaceGraph<V,
E> - Overrides:
setEdgeWeight
in classGraphDelegator<V,
E> - Parameters:
e
- edge on which to set weightweight
- new weight for edge- Throws:
NullPointerException
- if the edge is null
-
getType
Description copied from class:GraphDelegator
Get the graph type. The graph type can be used to query for additional metadata such as whether the graph supports directed or undirected edges, self-loops, multiple (parallel) edges, weights, etc.
-