<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.programmingexamples.net/w/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.programmingexamples.net/w/index.php?action=history&amp;feed=atom&amp;title=CPP%2FBoost%2FBGL%2FMaxFlow</id>
		<title>CPP/Boost/BGL/MaxFlow - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://www.programmingexamples.net/w/index.php?action=history&amp;feed=atom&amp;title=CPP%2FBoost%2FBGL%2FMaxFlow"/>
		<link rel="alternate" type="text/html" href="http://www.programmingexamples.net/w/index.php?title=CPP/Boost/BGL/MaxFlow&amp;action=history"/>
		<updated>2026-06-15T11:53:28Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.5</generator>

	<entry>
		<id>http://www.programmingexamples.net/w/index.php?title=CPP/Boost/BGL/MaxFlow&amp;diff=5159&amp;oldid=prev</id>
		<title>Daviddoria: Created page with '==MaxFlow.cpp== &lt;source lang=&quot;cpp&quot;&gt; #include &lt;iostream&gt; #include &lt;boost/graph/adjacency_list.hpp&gt; #include &lt;boost/graph/boykov_kolmogorov_max_flow.hpp&gt; #include &lt;boost/graph/push…'</title>
		<link rel="alternate" type="text/html" href="http://www.programmingexamples.net/w/index.php?title=CPP/Boost/BGL/MaxFlow&amp;diff=5159&amp;oldid=prev"/>
				<updated>2012-05-03T21:01:46Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;#039;==MaxFlow.cpp== &amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; #include &amp;lt;iostream&amp;gt; #include &amp;lt;boost/graph/adjacency_list.hpp&amp;gt; #include &amp;lt;boost/graph/boykov_kolmogorov_max_flow.hpp&amp;gt; #include &amp;lt;boost/graph/push…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==MaxFlow.cpp==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/graph/adjacency_list.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/graph/boykov_kolmogorov_max_flow.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/graph/push_relabel_max_flow.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/graph/edmonds_karp_max_flow.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
using namespace boost;&lt;br /&gt;
&lt;br /&gt;
typedef int EdgeWeightType;&lt;br /&gt;
&lt;br /&gt;
typedef adjacency_list_traits &amp;lt; vecS, vecS, directedS &amp;gt; Traits;&lt;br /&gt;
typedef adjacency_list &amp;lt; vecS, vecS, directedS,&lt;br /&gt;
  property &amp;lt; vertex_name_t, std::string,&lt;br /&gt;
    property &amp;lt; vertex_index_t, long,&lt;br /&gt;
      property &amp;lt; vertex_color_t, boost::default_color_type,&lt;br /&gt;
        property &amp;lt; vertex_distance_t, long,&lt;br /&gt;
          property &amp;lt; vertex_predecessor_t, Traits::edge_descriptor &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;,&lt;br /&gt;
&lt;br /&gt;
  property &amp;lt; edge_capacity_t, EdgeWeightType,&lt;br /&gt;
    property &amp;lt; edge_residual_capacity_t, EdgeWeightType,&lt;br /&gt;
      property &amp;lt; edge_reverse_t, Traits::edge_descriptor &amp;gt; &amp;gt; &amp;gt; &amp;gt; Graph;&lt;br /&gt;
&lt;br /&gt;
Traits::edge_descriptor AddEdge(Traits::vertex_descriptor &amp;amp;v1,&lt;br /&gt;
                                Traits::vertex_descriptor &amp;amp;v2,&lt;br /&gt;
                                property_map &amp;lt; Graph, edge_reverse_t &amp;gt;::type &amp;amp;rev,&lt;br /&gt;
                                const double capacity,&lt;br /&gt;
                                Graph &amp;amp;g);&lt;br /&gt;
&lt;br /&gt;
int main(int, char*[])&lt;br /&gt;
{&lt;br /&gt;
  Graph g; //a graph with 0 vertices&lt;br /&gt;
&lt;br /&gt;
  property_map &amp;lt; Graph, edge_reverse_t &amp;gt;::type rev = get(edge_reverse, g);&lt;br /&gt;
&lt;br /&gt;
  //add a source and sink node, and store them in s and t, respectively&lt;br /&gt;
  Traits::vertex_descriptor v0 = add_vertex(g);&lt;br /&gt;
  Traits::vertex_descriptor v1 = add_vertex(g);&lt;br /&gt;
  Traits::vertex_descriptor v2 = add_vertex(g);&lt;br /&gt;
  Traits::vertex_descriptor v3 = add_vertex(g);&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  AddEdge(v0, v1, rev, 6.0, g);&lt;br /&gt;
  AddEdge(v0, v2, rev, 5.0, g);&lt;br /&gt;
  AddEdge(v1, v2, rev, 8.0, g);&lt;br /&gt;
  AddEdge(v2, v3, rev, 7.0, g);&lt;br /&gt;
  */&lt;br /&gt;
  AddEdge(v0, v1, rev, 6, g);&lt;br /&gt;
  AddEdge(v0, v2, rev, 5, g);&lt;br /&gt;
  AddEdge(v1, v3, rev, 8, g);&lt;br /&gt;
  AddEdge(v2, v3, rev, 7, g);&lt;br /&gt;
&lt;br /&gt;
  //find min cut&lt;br /&gt;
  EdgeWeightType flow = boykov_kolmogorov_max_flow(g, v0, v3); // a list of sources will be returned in s, and a list of sinks will be returned in t&lt;br /&gt;
  //EdgeWeightType flow = push_relabel_max_flow(g, v0, v3); // a list of sources will be returned in s, and a list of sinks will be returned in t&lt;br /&gt;
  //EdgeWeightType flow = edmunds_karp_max_flow(g, v0, v3); // a list of sources will be returned in s, and a list of sinks will be returned in t&lt;br /&gt;
&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; &amp;quot;Max flow is: &amp;quot; &amp;lt;&amp;lt; flow &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
  property_map&amp;lt;Graph, edge_capacity_t&amp;gt;::type&lt;br /&gt;
		  capacity = get(edge_capacity, g);&lt;br /&gt;
  property_map&amp;lt;Graph, edge_residual_capacity_t&amp;gt;::type&lt;br /&gt;
		  residual_capacity = get(edge_residual_capacity, g);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  graph_traits&amp;lt;Graph&amp;gt;::vertex_iterator u_iter, u_end;&lt;br /&gt;
  graph_traits&amp;lt;Graph&amp;gt;::out_edge_iterator ei, e_end;&lt;br /&gt;
  for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter)&lt;br /&gt;
	  for (tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei)&lt;br /&gt;
		  if (capacity[*ei] &amp;gt; 0)&lt;br /&gt;
			  std::cout &amp;lt;&amp;lt; &amp;quot;Source: &amp;quot; &amp;lt;&amp;lt; *u_iter &amp;lt;&amp;lt; &amp;quot; destination: &amp;quot; &amp;lt;&amp;lt; target(*ei, g) &amp;lt;&amp;lt; &amp;quot; capacity: &amp;quot;  &amp;lt;&amp;lt; capacity[*ei] &amp;lt;&amp;lt; &amp;quot;residual cap: &amp;quot; &amp;lt;&amp;lt; residual_capacity[*ei] &amp;lt;&amp;lt; &amp;quot; used capacity: &amp;quot;&lt;br /&gt;
					  &amp;lt;&amp;lt; (capacity[*ei] - residual_capacity[*ei]) &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
 return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Traits::edge_descriptor AddEdge(Traits::vertex_descriptor &amp;amp;v1, Traits::vertex_descriptor &amp;amp;v2, property_map &amp;lt; Graph, edge_reverse_t &amp;gt;::type &amp;amp;rev, const double capacity, Graph &amp;amp;g)&lt;br /&gt;
{&lt;br /&gt;
  Traits::edge_descriptor e1 = add_edge(v1, v2, g).first;&lt;br /&gt;
  Traits::edge_descriptor e2 = add_edge(v2, v1, g).first;&lt;br /&gt;
  put(edge_capacity, g, e1, capacity);&lt;br /&gt;
  put(edge_capacity, g, e2, capacity);&lt;br /&gt;
&lt;br /&gt;
  rev[e1] = e2;&lt;br /&gt;
  rev[e2] = e1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
  //find min cut&lt;br /&gt;
  kolmogorov_max_flow&lt;br /&gt;
		  (Graph&amp;amp; g,&lt;br /&gt;
		    CapacityEdgeMap cap,&lt;br /&gt;
    ResidualCapacityEdgeMap res_cap,&lt;br /&gt;
    ReverseEdgeMap rev,&lt;br /&gt;
    ColorMap color,&lt;br /&gt;
    IndexMap idx,&lt;br /&gt;
    typename graph_traits&amp;lt;Graph&amp;gt;::vertex_descriptor src,&lt;br /&gt;
    typename graph_traits&amp;lt;Graph&amp;gt;::vertex_descriptor sink)&lt;br /&gt;
  {&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CMakeLists.txt==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cmake&amp;quot;&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 2.6)&lt;br /&gt;
&lt;br /&gt;
project(MaxFlow)&lt;br /&gt;
&lt;br /&gt;
set(Boost_USE_MULTITHREADED ON) # which is the default&lt;br /&gt;
find_package(Boost 1.46)&lt;br /&gt;
&lt;br /&gt;
include_directories(${Boost_INCLUDE_DIRS})&lt;br /&gt;
&lt;br /&gt;
add_executable(MaxFlow MaxFlow.cpp)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daviddoria</name></author>	</entry>

	</feed>