| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | //=======================================================================// Copyright 2013 University of Warsaw.// Authors: Piotr Wygocki//// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)//=======================================================================#ifndef BOOST_GRAPH_AUGMENT_HPP#define BOOST_GRAPH_AUGMENT_HPP#include <boost/graph/filtered_graph.hpp>namespace boost{namespace detail{    template < class Graph, class ResCapMap >    filtered_graph< const Graph, is_residual_edge< ResCapMap > > residual_graph(        const Graph& g, ResCapMap residual_capacity)    {        return filtered_graph< const Graph, is_residual_edge< ResCapMap > >(            g, is_residual_edge< ResCapMap >(residual_capacity));    }    template < class Graph, class PredEdgeMap, class ResCapMap,        class RevEdgeMap >    inline void augment(const Graph& g,        typename graph_traits< Graph >::vertex_descriptor src,        typename graph_traits< Graph >::vertex_descriptor sink, PredEdgeMap p,        ResCapMap residual_capacity, RevEdgeMap reverse_edge)    {        typename graph_traits< Graph >::edge_descriptor e;        typename graph_traits< Graph >::vertex_descriptor u;        typedef typename property_traits< ResCapMap >::value_type FlowValue;        // find minimum residual capacity along the augmenting path        FlowValue delta = (std::numeric_limits< FlowValue >::max)();        e = get(p, sink);        do        {            BOOST_USING_STD_MIN();            delta = min BOOST_PREVENT_MACRO_SUBSTITUTION(                delta, get(residual_capacity, e));            u = source(e, g);            e = get(p, u);        } while (u != src);        // push delta units of flow along the augmenting path        e = get(p, sink);        do        {            put(residual_capacity, e, get(residual_capacity, e) - delta);            put(residual_capacity, get(reverse_edge, e),                get(residual_capacity, get(reverse_edge, e)) + delta);            u = source(e, g);            e = get(p, u);        } while (u != src);    }} // namespace detail} // namespace boost#endif /* BOOST_GRAPH_AUGMENT_HPP */
 |