Class EdmondsKarpMaximumFlow<TVertex, TEdge, TWeight>
- Namespace
- Graph1x.Algorithms
- Assembly
- Graph1x.dll
The Edmonds-Karp maximum-flow algorithm: Ford-Fulkerson with breadth-first augmenting paths, giving O(V·E²) independently of capacity values. With floating-point capacities, tiny rounding residues are possible — integer or decimal capacities are exact. For large or dense networks consider DinicMaximumFlow<TVertex, TEdge, TWeight>.
public sealed class EdmondsKarpMaximumFlow<TVertex, TEdge, TWeight> : IMaximumFlowAlgorithm<TVertex, TEdge, TWeight> where TVertex : notnull where TEdge : IEdge<TVertex> where TWeight : INumber<TWeight>
Type Parameters
TVertexThe vertex type.
TEdgeThe edge type.
TWeightThe numeric capacity type.
- Inheritance
-
EdmondsKarpMaximumFlow<TVertex, TEdge, TWeight>
- Implements
-
IMaximumFlowAlgorithm<TVertex, TEdge, TWeight>
- Inherited Members
Constructors
EdmondsKarpMaximumFlow(Func<TEdge, TWeight>)
Initializes the algorithm with the function that reads an edge's capacity.
public EdmondsKarpMaximumFlow(Func<TEdge, TWeight> capacitySelector)
Parameters
capacitySelectorFunc<TEdge, TWeight>Maps an edge to its capacity.
Exceptions
- ArgumentNullException
capacitySelectoris null.
Methods
FindMaximumFlow(IDirectedGraph<TVertex, TEdge>, TVertex, TVertex)
Computes the maximum flow from source to sink.
public MaximumFlowResult<TVertex, TEdge, TWeight> FindMaximumFlow(IDirectedGraph<TVertex, TEdge> graph, TVertex source, TVertex sink)
Parameters
graphIDirectedGraph<TVertex, TEdge>The directed flow network.
sourceTVertexThe vertex the flow originates from.
sinkTVertexThe vertex the flow drains into.
Returns
- MaximumFlowResult<TVertex, TEdge, TWeight>
The flow value, per-edge flows, and a minimum cut.
Exceptions
- ArgumentException
Either endpoint is missing, or source equals sink.
- NegativeWeightException
An edge has negative capacity.
FindMaximumFlow(IDirectedGraph<TVertex, TEdge>, TVertex, TVertex, CancellationToken)
Computes the maximum flow, observing cancellationToken
cooperatively. The default implementation forwards to the tokenless
overload and therefore ignores the token — implementations should
override it to honor cancellation.
public MaximumFlowResult<TVertex, TEdge, TWeight> FindMaximumFlow(IDirectedGraph<TVertex, TEdge> graph, TVertex source, TVertex sink, CancellationToken cancellationToken)
Parameters
graphIDirectedGraph<TVertex, TEdge>The directed flow network.
sourceTVertexThe vertex the flow originates from.
sinkTVertexThe vertex the flow drains into.
cancellationTokenCancellationTokenCancels the computation cooperatively.
Returns
- MaximumFlowResult<TVertex, TEdge, TWeight>
The flow value, per-edge flows, and a minimum cut.
Remarks
Cancellation is observed between augmenting paths.
Exceptions
- OperationCanceledException
The token was cancelled (honored by overriding implementations).