/// <summary>
 /// 
 /// </summary>
 /// <param name="g"></param>
 /// <param name="capacities"></param>
 /// <param name="reversedEdges"></param>
 public EdmondsKarpMaximumFlowAlgorithm(
     IVertexListGraph g,
     EdgeDoubleDictionary capacities,
     EdgeEdgeDictionary reversedEdges
     )
     : base(g,capacities,reversedEdges)
 {
 }
 public PushRelabelMaximumFlowAlgorithm(IIndexedVertexListGraph g, EdgeDoubleDictionary capacities, EdgeEdgeDictionary reversedEdges)
     : base(g, capacities, reversedEdges)
 {
     this.visitedGraph = g;
     this.excessFlow = new VertexDoubleDictionary();
     this.current = new VertexIntDictionary();
     this.distances = new VertexIntDictionary();
 }
        public EdgeEdgeDictionary <TVertex, TEdge> Clone()
        {
            var clone = new EdgeEdgeDictionary <TVertex, TEdge>(this.Count);

            foreach (var kv in this)
            {
                clone.Add(kv.Key, kv.Value);
            }
            return(clone);
        }
		public void Init()
		{
			this.capacities = new EdgeDoubleDictionary();
			this.reversedEdges = new EdgeEdgeDictionary();
			this.graph = new AdjacencyGraph();

			this.source = graph.AddVertex();
			this.sink = graph.AddVertex();

			BuildSimpleGraph(source, sink);
		}
		/// <summary>
		/// 
		/// </summary>
		/// <param name="edgePredecessors"></param>
		/// <param name="endPathEdges"></param>
		public EdgePredecessorRecorderVisitor(
			EdgeEdgeDictionary edgePredecessors,
			EdgeCollection endPathEdges
			)
		{
			if (edgePredecessors==null)
				throw new ArgumentNullException("edgePredecessors");
			if (endPathEdges==null)
				throw new ArgumentNullException("endPathEdges");

			this.edgePredecessors = edgePredecessors;
			this.endPathEdges = endPathEdges;
		}
		/// <summary>Constructs a maximum flow algorithm.</summary>
		/// <param name="g">Graph to compute maximum flow on.</param>
		/// <param name="capacities">edge capacities</param>
		/// <param name="reversedEdges">reversed edge map</param>
		/// <exception cref="ArgumentNullException"><paramref name="g"/> or
		/// <paramref name="capacities"/> or <paramref name="reversedEdges"/> is a null
		/// reference.
		/// </exception>
		public MaximumFlowAlgorithm(
			IVertexListGraph g,
			EdgeDoubleDictionary capacities,
			EdgeEdgeDictionary reversedEdges
			)
		{
			if (g==null)
				throw new ArgumentNullException("g");
			if (capacities==null)
				throw new ArgumentNullException("capacities");
			if (reversedEdges==null)
				throw new ArgumentNullException("reversedEdges");
		
			this.visitedGraph=g;
			this.capacities=capacities;
			this.reversedEdges=reversedEdges;
		
			this.predecessors=new VertexEdgeDictionary();
			this.residualCapacities=new EdgeDoubleDictionary();
			this.colors = new VertexColorDictionary();
        }
		/// <summary>
		/// Default constructor
		/// </summary>
		public EdgePredecessorRecorderVisitor()
		{
			edgePredecessors = new EdgeEdgeDictionary();
			endPathEdges = new EdgeCollection();
		}