Beispiel #1
0
		private bool IsOptimal(MaximumFlowAlgorithm maxFlow)
		{
			// check if mincut is saturated...
			FilteredVertexListGraph residualGraph = new FilteredVertexListGraph(
				maxFlow.VisitedGraph, 
				new ReversedResidualEdgePredicate(maxFlow.ResidualCapacities, maxFlow.ReversedEdges)
				);
			BreadthFirstSearchAlgorithm bfs = new BreadthFirstSearchAlgorithm(residualGraph);

			VertexIntDictionary distances = new VertexIntDictionary();
			DistanceRecorderVisitor vis = new DistanceRecorderVisitor(distances);
			bfs.RegisterDistanceRecorderHandlers(vis);
			bfs.Compute(sink);

			return distances[source] >= maxFlow.VisitedGraph.VerticesCount;
		}