Package edu.princeton.cs.algs4
Class FlowEdge
- Object
-
- edu.princeton.cs.algs4.FlowEdge
-
public class FlowEdge extends Object
TheFlowEdgeclass 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 vertexvto vertexwwith the givencapacityand zero flow.FlowEdge(int v, int w, double capacity, double flow)Initializes an edge from vertexvto vertexwwith the givencapacityandflow.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 voidaddResidualFlowTo(int vertex, double delta)Increases the flow on the edge in the direction to the given vertex.doublecapacity()Returns the capacity of the edge.doubleflow()Returns the flow on the edge.intfrom()Returns the tail vertex of the edge.static voidmain(String[] args)Unit tests theFlowEdgedata type.intother(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).doubleresidualCapacityTo(int vertex)Returns the residual capacity of the edge in the direction to the givenvertex.intto()Returns the head vertex of the edge.StringtoString()Returns a string representation of the edge.
-
-
-
Constructor Detail
-
FlowEdge
public FlowEdge(int v, int w, double capacity)Initializes an edge from vertexvto vertexwwith the givencapacityand zero flow.- Parameters:
v- the tail vertexw- the head vertexcapacity- the capacity of the edge- Throws:
IllegalArgumentException- if eithervorwis a negative integerIllegalArgumentException- ifcapacity < 0.0
-
FlowEdge
public FlowEdge(int v, int w, double capacity, double flow)Initializes an edge from vertexvto vertexwwith the givencapacityandflow.- Parameters:
v- the tail vertexw- the head vertexcapacity- the capacity of the edgeflow- the flow on the edge- Throws:
IllegalArgumentException- if eithervorwis a negative integerIllegalArgumentException- ifcapacityis negativeIllegalArgumentException- unlessflowis between0.0andcapacity.
-
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- ifvertexis 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
vertexis the tail vertex, the residual capacity equalscapacity() - flow(); ifvertexis the head vertex, the residual capacity equalsflow(). - Throws:
IllegalArgumentException- ifvertexis 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. Ifvertexis the tail vertex, this increases the flow on the edge bydelta; ifvertexis 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- ifvertexis not one of the endpoints of the edgeIllegalArgumentException- ifdeltamakes the flow on the edge either negative or larger than its capacityIllegalArgumentException- ifdeltaisNaN
-
toString
public String toString()
Returns a string representation of the edge.
-
main
public static void main(String[] args)
Unit tests theFlowEdgedata type.- Parameters:
args- the command-line arguments
-
-