Package edu.princeton.cs.algs4
Class FlowEdge
- Object
-
- edu.princeton.cs.algs4.FlowEdge
-
public class FlowEdge extends Object
TheFlowEdge
class represents a capacitated edge with a flow in aFlowNetwork
. Each edge consists of two integers (naming the two vertices), a real-valued capacity, and a real-valued flow. The data type provides methods for accessing the two endpoints of the directed edge and the weight. It also provides methods for changing the amount of flow on the edge and determining the residual capacity of the edge.For additional documentation, see Section 6.4 of Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne.
- Author:
- Robert Sedgewick, Kevin Wayne
-
-
Constructor Summary
Constructors Constructor Description FlowEdge(int v, int w, double capacity)
Initializes an edge from vertexv
to vertexw
with the givencapacity
and zero flow.FlowEdge(int v, int w, double capacity, double flow)
Initializes an edge from vertexv
to vertexw
with the givencapacity
andflow
.FlowEdge(FlowEdge e)
Initializes a flow edge from another flow edge.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addResidualFlowTo(int vertex, double delta)
Increases the flow on the edge in the direction to the given vertex.double
capacity()
Returns the capacity of the edge.double
flow()
Returns the flow on the edge.int
from()
Returns the tail vertex of the edge.static void
main(String[] args)
Unit tests theFlowEdge
data type.int
other(int vertex)
Returns the endpoint of the edge that is different from the given vertex (unless the edge represents a self-loop in which case it returns the same vertex).double
residualCapacityTo(int vertex)
Returns the residual capacity of the edge in the direction to the givenvertex
.int
to()
Returns the head vertex of the edge.String
toString()
Returns a string representation of the edge.
-
-
-
Constructor Detail
-
FlowEdge
public FlowEdge(int v, int w, double capacity)
Initializes an edge from vertexv
to vertexw
with the givencapacity
and zero flow.- Parameters:
v
- the tail vertexw
- the head vertexcapacity
- the capacity of the edge- Throws:
IllegalArgumentException
- if eitherv
orw
is a negative integerIllegalArgumentException
- ifcapacity < 0.0
-
FlowEdge
public FlowEdge(int v, int w, double capacity, double flow)
Initializes an edge from vertexv
to vertexw
with the givencapacity
andflow
.- Parameters:
v
- the tail vertexw
- the head vertexcapacity
- the capacity of the edgeflow
- the flow on the edge- Throws:
IllegalArgumentException
- if eitherv
orw
is a negative integerIllegalArgumentException
- ifcapacity
is negativeIllegalArgumentException
- unlessflow
is between0.0
andcapacity
.
-
FlowEdge
public FlowEdge(FlowEdge e)
Initializes a flow edge from another flow edge.- Parameters:
e
- the edge to copy
-
-
Method Detail
-
from
public int from()
Returns the tail vertex of the edge.- Returns:
- the tail vertex of the edge
-
to
public int to()
Returns the head vertex of the edge.- Returns:
- the head vertex of the edge
-
capacity
public double capacity()
Returns the capacity of the edge.- Returns:
- the capacity of the edge
-
flow
public double flow()
Returns the flow on the edge.- Returns:
- the flow on the edge
-
other
public int other(int vertex)
Returns the endpoint of the edge that is different from the given vertex (unless the edge represents a self-loop in which case it returns the same vertex).- Parameters:
vertex
- one endpoint of the edge- Returns:
- the endpoint of the edge that is different from the given vertex (unless the edge represents a self-loop in which case it returns the same vertex)
- Throws:
IllegalArgumentException
- ifvertex
is not one of the endpoints of the edge
-
residualCapacityTo
public double residualCapacityTo(int vertex)
Returns the residual capacity of the edge in the direction to the givenvertex
.- Parameters:
vertex
- one endpoint of the edge- Returns:
- the residual capacity of the edge in the direction to the given vertex
If
vertex
is the tail vertex, the residual capacity equalscapacity() - flow()
; ifvertex
is the head vertex, the residual capacity equalsflow()
. - Throws:
IllegalArgumentException
- ifvertex
is not one of the endpoints of the edge
-
addResidualFlowTo
public void addResidualFlowTo(int vertex, double delta)
Increases the flow on the edge in the direction to the given vertex. Ifvertex
is the tail vertex, this increases the flow on the edge bydelta
; ifvertex
is the head vertex, this decreases the flow on the edge bydelta
.- Parameters:
vertex
- one endpoint of the edgedelta
- amount by which to increase flow- Throws:
IllegalArgumentException
- ifvertex
is not one of the endpoints of the edgeIllegalArgumentException
- ifdelta
makes the flow on the edge either negative or larger than its capacityIllegalArgumentException
- ifdelta
isNaN
-
toString
public String toString()
Returns a string representation of the edge.
-
main
public static void main(String[] args)
Unit tests theFlowEdge
data type.- Parameters:
args
- the command-line arguments
-
-