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