You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2012/01/25 13:21:25 UTC
svn commit: r1235724 -
/commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/flow/FordFulkerson.java
Author: simonetripodi
Date: Wed Jan 25 12:21:25 2012
New Revision: 1235724
URL: http://svn.apache.org/viewvc?rev=1235724&view=rev
Log:
[SANDBOX-355] fix on unchecked type casting - patch provided by Claudio Squarcella
Modified:
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/flow/FordFulkerson.java
Modified: commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/flow/FordFulkerson.java
URL: http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/flow/FordFulkerson.java?rev=1235724&r1=1235723&r2=1235724&view=diff
==============================================================================
--- commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/flow/FordFulkerson.java (original)
+++ commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/flow/FordFulkerson.java Wed Jan 25 12:21:25 2012
@@ -61,9 +61,9 @@ public final class FordFulkerson
final OrderedMonoid<W> orderedMonoid )
{
// create flow network
- DirectedGraph<V, WE> flowNetwork = newDirectedMutableWeightedGraph( new AbstractGraphConnection<V, WE>()
+ // note: use edges of more generic type WeightedEdge<W> to allow for newly created edges
+ DirectedGraph<V, WeightedEdge<W>> flowNetwork = newDirectedMutableWeightedGraph( new AbstractGraphConnection<V, WeightedEdge<W>>()
{
- @SuppressWarnings( "unchecked" )
@Override
public void connect()
{
@@ -78,15 +78,22 @@ public final class FordFulkerson
VertexPair<V> edgeVertices = graph.getVertices( edge );
V head = edgeVertices.getHead();
V tail = edgeVertices.getTail();
+
addEdge( edge ).from( head ).to( tail );
- addEdge( (WE) new BaseLabeledWeightedEdge<W>( "Inverse edge for " + edge.toString(), orderedMonoid.zero() ) );
+
+ if ( graph.getEdge( tail, head ) == null )
+ {
+ // complete the flow network with a zero-capacity inverse edge
+ addEdge( new BaseLabeledWeightedEdge<W>( "Inverse edge for " + edge, orderedMonoid.zero() ) )
+ .from( tail ).to( head );
+ }
}
}
} );
// create flow network handler
- FlowNetworkHandler<V, WE, W> flowNetworkHandler =
- new FlowNetworkHandler<V, WE, W>( flowNetwork, source, target, orderedMonoid );
+ FlowNetworkHandler<V, WeightedEdge<W>, W> flowNetworkHandler =
+ new FlowNetworkHandler<V, WeightedEdge<W>, W>( flowNetwork, source, target, orderedMonoid );
// perform depth first search
visit( flowNetwork ).from( source ).applyingDepthFirstSearch( flowNetworkHandler );