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 );