Files
ortools-clone/docs/cpp_graph/classoperations__research_1_1GenericMaxFlow.html
2019-06-13 15:51:12 +02:00

2484 lines
148 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>OR-Tools</title>
<meta http-equiv="Content-Type" content="text/html;"/>
<meta charset="utf-8"/>
<!--<link rel='stylesheet' type='text/css' href="https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic"/>-->
<link rel="stylesheet" type="text/css" href="doxygen.css" title="default" media="screen,print" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
</head>
<body>
<div id="banner-container">
<div id="banner">
<span id="sfml">OR-Tools 7.1@</span>
</div>
</div>
<div id="content">
<!-- Generated by Doxygen 1.8.15 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceoperations__research.html">operations_research</a></li><li class="navelem"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html">GenericMaxFlow</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="#pro-static-attribs">Static Protected Attributes</a> &#124;
<a href="classoperations__research_1_1GenericMaxFlow-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">operations_research::GenericMaxFlow&lt; Graph &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Forward declaration.
<a href="classoperations__research_1_1GenericMaxFlow.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="max__flow_8h_source.html">max_flow.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for operations_research::GenericMaxFlow&lt; Graph &gt;:</div>
<div class="dyncontent">
<div class="center"><img src="classoperations__research_1_1GenericMaxFlow__inherit__graph.png" border="0" usemap="#operations__research_1_1GenericMaxFlow_3_01Graph_01_4_inherit__map" alt="Inheritance graph"/></div>
<map name="operations__research_1_1GenericMaxFlow_3_01Graph_01_4_inherit__map" id="operations__research_1_1GenericMaxFlow_3_01Graph_01_4_inherit__map">
<area shape="rect" title="Forward declaration." alt="" coords="5,92,194,131"/>
<area shape="rect" href="classoperations__research_1_1MaxFlowStatusClass.html" title="We want an enum for the Status of a max flow run, and we want this enum to be scoped under GenericMax..." alt="" coords="23,5,176,44"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for operations_research::GenericMaxFlow&lt; Graph &gt;:</div>
<div class="dyncontent">
<div class="center"><img src="classoperations__research_1_1GenericMaxFlow__coll__graph.png" border="0" usemap="#operations__research_1_1GenericMaxFlow_3_01Graph_01_4_coll__map" alt="Collaboration graph"/></div>
<map name="operations__research_1_1GenericMaxFlow_3_01Graph_01_4_coll__map" id="operations__research_1_1GenericMaxFlow_3_01Graph_01_4_coll__map">
<area shape="rect" title="Forward declaration." alt="" coords="419,75,607,113"/>
<area shape="rect" href="classoperations__research_1_1MaxFlowStatusClass.html" title="We want an enum for the Status of a max flow run, and we want this enum to be scoped under GenericMax..." alt="" coords="37,5,190,44"/>
<area shape="rect" href="classoperations__research_1_1PriorityQueueWithRestrictedPush.html" title=" " alt="" coords="5,68,222,120"/>
<area shape="rect" title=" " alt="" coords="85,144,143,169"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:af29cd6d6e7b334690d8ebe90ed0be410"><td class="memItemLeft" align="right" valign="top">typedef Graph::NodeIndex&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a></td></tr>
<tr class="separator:af29cd6d6e7b334690d8ebe90ed0be410"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abaf68b768e58ec738030f02c288d4ee2"><td class="memItemLeft" align="right" valign="top">typedef Graph::ArcIndex&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a></td></tr>
<tr class="separator:abaf68b768e58ec738030f02c288d4ee2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41c3325e4b03cd0763ccf20aa857f7a0"><td class="memItemLeft" align="right" valign="top">typedef Graph::OutgoingArcIterator&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a41c3325e4b03cd0763ccf20aa857f7a0">OutgoingArcIterator</a></td></tr>
<tr class="separator:a41c3325e4b03cd0763ccf20aa857f7a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6aa151eb19acac7bcbeced26a82f355"><td class="memItemLeft" align="right" valign="top">typedef Graph::OutgoingOrOppositeIncomingArcIterator&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ab6aa151eb19acac7bcbeced26a82f355">OutgoingOrOppositeIncomingArcIterator</a></td></tr>
<tr class="separator:ab6aa151eb19acac7bcbeced26a82f355"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abaa264696c6c702be6b4a54c5b7947b8"><td class="memItemLeft" align="right" valign="top">typedef Graph::IncomingArcIterator&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaa264696c6c702be6b4a54c5b7947b8">IncomingArcIterator</a></td></tr>
<tr class="separator:abaa264696c6c702be6b4a54c5b7947b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11a3c0e3b614e504cbb174cf0c4a90db"><td class="memItemLeft" align="right" valign="top">typedef ZVector&lt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a11a3c0e3b614e504cbb174cf0c4a90db">ArcIndexArray</a></td></tr>
<tr class="separator:a11a3c0e3b614e504cbb174cf0c4a90db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4bfa3888f90a91610caa02c8498c6f67"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a4bfa3888f90a91610caa02c8498c6f67">NodeHeight</a></td></tr>
<tr class="memdesc:a4bfa3888f90a91610caa02c8498c6f67"><td class="mdescLeft">&#160;</td><td class="mdescRight">The height of a node never excess 2 times the number of node, so we use the same type as a Node index. <a href="#a4bfa3888f90a91610caa02c8498c6f67">More...</a><br /></td></tr>
<tr class="separator:a4bfa3888f90a91610caa02c8498c6f67"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93990798ae28a85494473072c95072d2"><td class="memItemLeft" align="right" valign="top">typedef ZVector&lt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a4bfa3888f90a91610caa02c8498c6f67">NodeHeight</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a93990798ae28a85494473072c95072d2">NodeHeightArray</a></td></tr>
<tr class="separator:a93990798ae28a85494473072c95072d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa3fbead787cfdfac0b9e7b217e06cbfb"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1MaxFlowStatusClass.html#aa3fbead787cfdfac0b9e7b217e06cbfb">Status</a> { <br />
&#160;&#160;<a class="el" href="classoperations__research_1_1MaxFlowStatusClass.html#aa3fbead787cfdfac0b9e7b217e06cbfbac3c19ea88d51e9ddc44a20cc13e4fb74">NOT_SOLVED</a>,
<a class="el" href="classoperations__research_1_1MaxFlowStatusClass.html#aa3fbead787cfdfac0b9e7b217e06cbfba521cd576d678a5c22f21b4a7ec2ff02b">OPTIMAL</a>,
<a class="el" href="classoperations__research_1_1MaxFlowStatusClass.html#aa3fbead787cfdfac0b9e7b217e06cbfba288fa96697726e05e63cc28b56c57d36">INT_OVERFLOW</a>,
<a class="el" href="classoperations__research_1_1MaxFlowStatusClass.html#aa3fbead787cfdfac0b9e7b217e06cbfba9b4b284d9cef8bc7ea112971c14584df">BAD_INPUT</a>,
<br />
&#160;&#160;<a class="el" href="classoperations__research_1_1MaxFlowStatusClass.html#aa3fbead787cfdfac0b9e7b217e06cbfba64972e5527eb00cc4e60ce5b2f898193">BAD_RESULT</a>
<br />
}</td></tr>
<tr class="separator:aa3fbead787cfdfac0b9e7b217e06cbfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ae78f6137700a6942cee3b8b5bd40817b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ae78f6137700a6942cee3b8b5bd40817b">GenericMaxFlow</a> (const Graph *<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a8f83ce5b69d2e3d4cbf314ed6b3d01a6">graph</a>, <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> source, <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> sink)</td></tr>
<tr class="memdesc:ae78f6137700a6942cee3b8b5bd40817b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize a <a class="el" href="classoperations__research_1_1MaxFlow.html" title="Default instance MaxFlow that uses StarGraph.">MaxFlow</a> instance on the given graph. <a href="#ae78f6137700a6942cee3b8b5bd40817b">More...</a><br /></td></tr>
<tr class="separator:ae78f6137700a6942cee3b8b5bd40817b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6296328813067e9419925f40981f0867"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a6296328813067e9419925f40981f0867">~GenericMaxFlow</a> ()</td></tr>
<tr class="separator:a6296328813067e9419925f40981f0867"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f83ce5b69d2e3d4cbf314ed6b3d01a6"><td class="memItemLeft" align="right" valign="top">const Graph *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a8f83ce5b69d2e3d4cbf314ed6b3d01a6">graph</a> () const</td></tr>
<tr class="memdesc:a8f83ce5b69d2e3d4cbf314ed6b3d01a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the graph associated to the current object. <a href="#a8f83ce5b69d2e3d4cbf314ed6b3d01a6">More...</a><br /></td></tr>
<tr class="separator:a8f83ce5b69d2e3d4cbf314ed6b3d01a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9662fa5cf2007a62968e6c22fb8a4564"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1MaxFlowStatusClass.html#aa3fbead787cfdfac0b9e7b217e06cbfb">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a9662fa5cf2007a62968e6c22fb8a4564">status</a> () const</td></tr>
<tr class="memdesc:a9662fa5cf2007a62968e6c22fb8a4564"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the status of last call to <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a1da59e63f4d617578a0dc218d7f2f3e9" title="Returns true if a maximum flow was solved.">Solve()</a>. <a href="#a9662fa5cf2007a62968e6c22fb8a4564">More...</a><br /></td></tr>
<tr class="separator:a9662fa5cf2007a62968e6c22fb8a4564"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeeb216a2384f75c7a46cf54de35027d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#aeeb216a2384f75c7a46cf54de35027d2">GetSourceNodeIndex</a> () const</td></tr>
<tr class="memdesc:aeeb216a2384f75c7a46cf54de35027d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the index of the node corresponding to the source of the network. <a href="#aeeb216a2384f75c7a46cf54de35027d2">More...</a><br /></td></tr>
<tr class="separator:aeeb216a2384f75c7a46cf54de35027d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c16f1156b2e038ca0d3f8ba96490ab5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a8c16f1156b2e038ca0d3f8ba96490ab5">GetSinkNodeIndex</a> () const</td></tr>
<tr class="memdesc:a8c16f1156b2e038ca0d3f8ba96490ab5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the index of the node corresponding to the sink of the network. <a href="#a8c16f1156b2e038ca0d3f8ba96490ab5">More...</a><br /></td></tr>
<tr class="separator:a8c16f1156b2e038ca0d3f8ba96490ab5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a05f2661c573eb445212f4eddd694fc2f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a05f2661c573eb445212f4eddd694fc2f">SetArcCapacity</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc, <a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a> new_capacity)</td></tr>
<tr class="memdesc:a05f2661c573eb445212f4eddd694fc2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the capacity for arc to new_capacity. <a href="#a05f2661c573eb445212f4eddd694fc2f">More...</a><br /></td></tr>
<tr class="separator:a05f2661c573eb445212f4eddd694fc2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a357ac0cc6e451b5b1b81a9abdeb49b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a9a357ac0cc6e451b5b1b81a9abdeb49b">SetArcFlow</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc, <a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a> new_flow)</td></tr>
<tr class="memdesc:a9a357ac0cc6e451b5b1b81a9abdeb49b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the flow for arc. <a href="#a9a357ac0cc6e451b5b1b81a9abdeb49b">More...</a><br /></td></tr>
<tr class="separator:a9a357ac0cc6e451b5b1b81a9abdeb49b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1da59e63f4d617578a0dc218d7f2f3e9"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a1da59e63f4d617578a0dc218d7f2f3e9">Solve</a> ()</td></tr>
<tr class="memdesc:a1da59e63f4d617578a0dc218d7f2f3e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if a maximum flow was solved. <a href="#a1da59e63f4d617578a0dc218d7f2f3e9">More...</a><br /></td></tr>
<tr class="separator:a1da59e63f4d617578a0dc218d7f2f3e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90f1c23703ab4e69d7e42549ea005464"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a90f1c23703ab4e69d7e42549ea005464">GetOptimalFlow</a> () const</td></tr>
<tr class="memdesc:a90f1c23703ab4e69d7e42549ea005464"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the total flow found by the algorithm. <a href="#a90f1c23703ab4e69d7e42549ea005464">More...</a><br /></td></tr>
<tr class="separator:a90f1c23703ab4e69d7e42549ea005464"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aef5b9fc304666691405861f4caf35f45"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#aef5b9fc304666691405861f4caf35f45">Flow</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc) const</td></tr>
<tr class="memdesc:aef5b9fc304666691405861f4caf35f45"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the flow on arc using the equations given in the comment on residual_arc_capacity_. <a href="#aef5b9fc304666691405861f4caf35f45">More...</a><br /></td></tr>
<tr class="separator:aef5b9fc304666691405861f4caf35f45"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa094beccfd146238de41da6f8a2b2e4a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#aa094beccfd146238de41da6f8a2b2e4a">Capacity</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc) const</td></tr>
<tr class="memdesc:aa094beccfd146238de41da6f8a2b2e4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the capacity of arc using the equations given in the comment on residual_arc_capacity_. <a href="#aa094beccfd146238de41da6f8a2b2e4a">More...</a><br /></td></tr>
<tr class="separator:aa094beccfd146238de41da6f8a2b2e4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a022da70970a497438cd0304cf1c6efd9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a022da70970a497438cd0304cf1c6efd9">GetSourceSideMinCut</a> (std::vector&lt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> &gt; *result)</td></tr>
<tr class="memdesc:a022da70970a497438cd0304cf1c6efd9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the nodes reachable from the source in the residual graph, the outgoing arcs of this set form a minimum cut. <a href="#a022da70970a497438cd0304cf1c6efd9">More...</a><br /></td></tr>
<tr class="separator:a022da70970a497438cd0304cf1c6efd9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad7892ad5aa8338015f320267fb7f298f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ad7892ad5aa8338015f320267fb7f298f">GetSinkSideMinCut</a> (std::vector&lt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> &gt; *result)</td></tr>
<tr class="memdesc:ad7892ad5aa8338015f320267fb7f298f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the nodes that can reach the sink in the residual graph, the outgoing arcs of this set form a minimum cut. <a href="#ad7892ad5aa8338015f320267fb7f298f">More...</a><br /></td></tr>
<tr class="separator:ad7892ad5aa8338015f320267fb7f298f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a160e49372bec143572964e6b19f444"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a6a160e49372bec143572964e6b19f444">CheckInputConsistency</a> () const</td></tr>
<tr class="memdesc:a6a160e49372bec143572964e6b19f444"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks the consistency of the input, i.e. <a href="#a6a160e49372bec143572964e6b19f444">More...</a><br /></td></tr>
<tr class="separator:a6a160e49372bec143572964e6b19f444"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ceac4e6ee8eedd556f1cdec11a2b665"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a5ceac4e6ee8eedd556f1cdec11a2b665">CheckResult</a> () const</td></tr>
<tr class="memdesc:a5ceac4e6ee8eedd556f1cdec11a2b665"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the result is valid, i.e. <a href="#a5ceac4e6ee8eedd556f1cdec11a2b665">More...</a><br /></td></tr>
<tr class="separator:a5ceac4e6ee8eedd556f1cdec11a2b665"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75c3aeba25a7c62b4e237d2b34594b0e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a75c3aeba25a7c62b4e237d2b34594b0e">AugmentingPathExists</a> () const</td></tr>
<tr class="memdesc:a75c3aeba25a7c62b4e237d2b34594b0e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if there exists a path from the source to the sink with remaining capacity. <a href="#a75c3aeba25a7c62b4e237d2b34594b0e">More...</a><br /></td></tr>
<tr class="separator:a75c3aeba25a7c62b4e237d2b34594b0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1055514c9f93a7ffeea0ae9e8a6a7f58"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a1055514c9f93a7ffeea0ae9e8a6a7f58">SetUseGlobalUpdate</a> (bool value)</td></tr>
<tr class="memdesc:a1055514c9f93a7ffeea0ae9e8a6a7f58"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the different algorithm options. <a href="#a1055514c9f93a7ffeea0ae9e8a6a7f58">More...</a><br /></td></tr>
<tr class="separator:a1055514c9f93a7ffeea0ae9e8a6a7f58"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0497a8b934a2aa9f7307428736f72522"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a0497a8b934a2aa9f7307428736f72522">SetUseTwoPhaseAlgorithm</a> (bool value)</td></tr>
<tr class="separator:a0497a8b934a2aa9f7307428736f72522"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3aaa8be2e8b64b746e6b46fa6463bbde"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a3aaa8be2e8b64b746e6b46fa6463bbde">SetCheckInput</a> (bool value)</td></tr>
<tr class="separator:a3aaa8be2e8b64b746e6b46fa6463bbde"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad80ce21a3088b4798da0eae774b0bab6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ad80ce21a3088b4798da0eae774b0bab6">SetCheckResult</a> (bool value)</td></tr>
<tr class="separator:ad80ce21a3088b4798da0eae774b0bab6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acc608bd04efcbcc5b72b76795f5d49d8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#acc608bd04efcbcc5b72b76795f5d49d8">ProcessNodeByHeight</a> (bool value)</td></tr>
<tr class="separator:acc608bd04efcbcc5b72b76795f5d49d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b1cf7943417c669c41dc29547f8cd00"><td class="memItemLeft" align="right" valign="top">FlowModel&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a5b1cf7943417c669c41dc29547f8cd00">CreateFlowModel</a> ()</td></tr>
<tr class="memdesc:a5b1cf7943417c669c41dc29547f8cd00"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the protocol buffer representation of the current problem. <a href="#a5b1cf7943417c669c41dc29547f8cd00">More...</a><br /></td></tr>
<tr class="separator:a5b1cf7943417c669c41dc29547f8cd00"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:aecd4716fa878055b30386f0f97a0d907"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#aecd4716fa878055b30386f0f97a0d907">IsAdmissible</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc) const</td></tr>
<tr class="memdesc:aecd4716fa878055b30386f0f97a0d907"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if arc is admissible. <a href="#aecd4716fa878055b30386f0f97a0d907">More...</a><br /></td></tr>
<tr class="separator:aecd4716fa878055b30386f0f97a0d907"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b535e0a581ca57102d6c495a10bc911"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a5b535e0a581ca57102d6c495a10bc911">IsActive</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> node) const</td></tr>
<tr class="memdesc:a5b535e0a581ca57102d6c495a10bc911"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if node is active, i.e. <a href="#a5b535e0a581ca57102d6c495a10bc911">More...</a><br /></td></tr>
<tr class="separator:a5b535e0a581ca57102d6c495a10bc911"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0c56ff7a0c8bac88e8f6e0da3689e838"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a0c56ff7a0c8bac88e8f6e0da3689e838">SetCapacityAndClearFlow</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc, <a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a> capacity)</td></tr>
<tr class="memdesc:a0c56ff7a0c8bac88e8f6e0da3689e838"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the capacity of arc to 'capacity' and clears the flow on arc. <a href="#a0c56ff7a0c8bac88e8f6e0da3689e838">More...</a><br /></td></tr>
<tr class="separator:a0c56ff7a0c8bac88e8f6e0da3689e838"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9dbc134de4c5e1d424b49f7000c713f4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a9dbc134de4c5e1d424b49f7000c713f4">CheckRelabelPrecondition</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> node) const</td></tr>
<tr class="memdesc:a9dbc134de4c5e1d424b49f7000c713f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if a precondition for Relabel is met, i.e. <a href="#a9dbc134de4c5e1d424b49f7000c713f4">More...</a><br /></td></tr>
<tr class="separator:a9dbc134de4c5e1d424b49f7000c713f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57cf9ba195eb368ccd5856ef7de4dcca"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a57cf9ba195eb368ccd5856ef7de4dcca">DebugString</a> (const std::string &amp;context, <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc) const</td></tr>
<tr class="memdesc:a57cf9ba195eb368ccd5856ef7de4dcca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns context concatenated with information about arc in a human-friendly way. <a href="#a57cf9ba195eb368ccd5856ef7de4dcca">More...</a><br /></td></tr>
<tr class="separator:a57cf9ba195eb368ccd5856ef7de4dcca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3b47bff3c2733b198d34aeaa0cbcfa19"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a3b47bff3c2733b198d34aeaa0cbcfa19">InitializeActiveNodeContainer</a> ()</td></tr>
<tr class="memdesc:a3b47bff3c2733b198d34aeaa0cbcfa19"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes the container active_nodes_. <a href="#a3b47bff3c2733b198d34aeaa0cbcfa19">More...</a><br /></td></tr>
<tr class="separator:a3b47bff3c2733b198d34aeaa0cbcfa19"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad411ee050c1c6a25b5b2abc42a2f0491"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ad411ee050c1c6a25b5b2abc42a2f0491">GetAndRemoveFirstActiveNode</a> ()</td></tr>
<tr class="memdesc:ad411ee050c1c6a25b5b2abc42a2f0491"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the first element from the active node container. <a href="#ad411ee050c1c6a25b5b2abc42a2f0491">More...</a><br /></td></tr>
<tr class="separator:ad411ee050c1c6a25b5b2abc42a2f0491"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4cc032f9987eb1ae9eaa8ebb013f671b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a4cc032f9987eb1ae9eaa8ebb013f671b">PushActiveNode</a> (const <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> &amp;node)</td></tr>
<tr class="memdesc:a4cc032f9987eb1ae9eaa8ebb013f671b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Push element to the active node container. <a href="#a4cc032f9987eb1ae9eaa8ebb013f671b">More...</a><br /></td></tr>
<tr class="separator:a4cc032f9987eb1ae9eaa8ebb013f671b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3653a3df1b94e4150486b5149d8eaae7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a3653a3df1b94e4150486b5149d8eaae7">IsEmptyActiveNodeContainer</a> ()</td></tr>
<tr class="memdesc:a3653a3df1b94e4150486b5149d8eaae7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check the emptiness of the container. <a href="#a3653a3df1b94e4150486b5149d8eaae7">More...</a><br /></td></tr>
<tr class="separator:a3653a3df1b94e4150486b5149d8eaae7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1061c1ce94ccc0d379390b8542bfaa23"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a1061c1ce94ccc0d379390b8542bfaa23">Refine</a> ()</td></tr>
<tr class="memdesc:a1061c1ce94ccc0d379390b8542bfaa23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs optimization step. <a href="#a1061c1ce94ccc0d379390b8542bfaa23">More...</a><br /></td></tr>
<tr class="separator:a1061c1ce94ccc0d379390b8542bfaa23"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a91d754521a7d43dd215e5d6200ec1062"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a91d754521a7d43dd215e5d6200ec1062">RefineWithGlobalUpdate</a> ()</td></tr>
<tr class="separator:a91d754521a7d43dd215e5d6200ec1062"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5a2c545458610cc9b1486ae083708574"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a5a2c545458610cc9b1486ae083708574">Discharge</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> node)</td></tr>
<tr class="memdesc:a5a2c545458610cc9b1486ae083708574"><td class="mdescLeft">&#160;</td><td class="mdescRight">Discharges an active node node by saturating its admissible adjacent arcs, if any, and by relabelling it when it becomes inactive. <a href="#a5a2c545458610cc9b1486ae083708574">More...</a><br /></td></tr>
<tr class="separator:a5a2c545458610cc9b1486ae083708574"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a20139b839cd5764939afc8df968a2484"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a20139b839cd5764939afc8df968a2484">InitializePreflow</a> ()</td></tr>
<tr class="memdesc:a20139b839cd5764939afc8df968a2484"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes the preflow to a state that enables to run Refine. <a href="#a20139b839cd5764939afc8df968a2484">More...</a><br /></td></tr>
<tr class="separator:a20139b839cd5764939afc8df968a2484"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a05eb488b184996513248b0dffca59600"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a05eb488b184996513248b0dffca59600">PushFlowExcessBackToSource</a> ()</td></tr>
<tr class="memdesc:a05eb488b184996513248b0dffca59600"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clears the flow excess at each node by pushing the flow back to the source: <a href="#a05eb488b184996513248b0dffca59600">More...</a><br /></td></tr>
<tr class="separator:a05eb488b184996513248b0dffca59600"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad3925f2137b18b1555563ed149ada740"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ad3925f2137b18b1555563ed149ada740">GlobalUpdate</a> ()</td></tr>
<tr class="memdesc:ad3925f2137b18b1555563ed149ada740"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the best possible node potential given the current flow using a reverse breadth-first search from the sink in the reverse residual graph. <a href="#ad3925f2137b18b1555563ed149ada740">More...</a><br /></td></tr>
<tr class="separator:ad3925f2137b18b1555563ed149ada740"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d2ffca7a04ecd2975025cb34a3898cb"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a2d2ffca7a04ecd2975025cb34a3898cb">SaturateOutgoingArcsFromSource</a> ()</td></tr>
<tr class="memdesc:a2d2ffca7a04ecd2975025cb34a3898cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tries to saturate all the outgoing arcs from the source that can reach the sink. <a href="#a2d2ffca7a04ecd2975025cb34a3898cb">More...</a><br /></td></tr>
<tr class="separator:a2d2ffca7a04ecd2975025cb34a3898cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c31c96effb1f91f800895be2339045b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a1c31c96effb1f91f800895be2339045b">PushFlow</a> (<a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a> flow, <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc)</td></tr>
<tr class="memdesc:a1c31c96effb1f91f800895be2339045b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pushes flow on arc, i.e. <a href="#a1c31c96effb1f91f800895be2339045b">More...</a><br /></td></tr>
<tr class="separator:a1c31c96effb1f91f800895be2339045b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa70e526f9be229e52bf598d9cd0e7406"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#aa70e526f9be229e52bf598d9cd0e7406">Relabel</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> node)</td></tr>
<tr class="memdesc:aa70e526f9be229e52bf598d9cd0e7406"><td class="mdescLeft">&#160;</td><td class="mdescRight">Relabels a node, i.e. <a href="#aa70e526f9be229e52bf598d9cd0e7406">More...</a><br /></td></tr>
<tr class="separator:aa70e526f9be229e52bf598d9cd0e7406"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4a6ec3deadedd6c027b8c0fbbdac88d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ad4a6ec3deadedd6c027b8c0fbbdac88d">Head</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc) const</td></tr>
<tr class="memdesc:ad4a6ec3deadedd6c027b8c0fbbdac88d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handy member functions to make the code more compact. <a href="#ad4a6ec3deadedd6c027b8c0fbbdac88d">More...</a><br /></td></tr>
<tr class="separator:ad4a6ec3deadedd6c027b8c0fbbdac88d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac28ab380716ec139afa31d485bbbd068"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ac28ab380716ec139afa31d485bbbd068">Tail</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc) const</td></tr>
<tr class="separator:ac28ab380716ec139afa31d485bbbd068"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15c425face4a4d1697c7ba298a727192"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a15c425face4a4d1697c7ba298a727192">Opposite</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc) const</td></tr>
<tr class="separator:a15c425face4a4d1697c7ba298a727192"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab64a5e41b9e15ab0953a59ef9fd2f49"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#aab64a5e41b9e15ab0953a59ef9fd2f49">IsArcDirect</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc) const</td></tr>
<tr class="separator:aab64a5e41b9e15ab0953a59ef9fd2f49"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace677adc9ba14e72018a7aa78955df18"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ace677adc9ba14e72018a7aa78955df18">IsArcValid</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> arc) const</td></tr>
<tr class="separator:ace677adc9ba14e72018a7aa78955df18"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade3632560edb912b1758628f327dfe3d"><td class="memTemplParams" colspan="2">template&lt;bool reverse&gt; </td></tr>
<tr class="memitem:ade3632560edb912b1758628f327dfe3d"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ade3632560edb912b1758628f327dfe3d">ComputeReachableNodes</a> (<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> start, std::vector&lt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> &gt; *result)</td></tr>
<tr class="memdesc:ade3632560edb912b1758628f327dfe3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the set of nodes reachable from start in the residual graph or in the reverse residual graph (if reverse is true). <a href="#ade3632560edb912b1758628f327dfe3d">More...</a><br /></td></tr>
<tr class="separator:ade3632560edb912b1758628f327dfe3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a27da86de84ba65849c8aebf7aa153f91"><td class="memItemLeft" align="right" valign="top">const Graph *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a27da86de84ba65849c8aebf7aa153f91">graph_</a></td></tr>
<tr class="memdesc:a27da86de84ba65849c8aebf7aa153f91"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the graph passed as argument. <a href="#a27da86de84ba65849c8aebf7aa153f91">More...</a><br /></td></tr>
<tr class="separator:a27da86de84ba65849c8aebf7aa153f91"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6881e220a50b6ab95192f7f263b5eee6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoperations__research.html#a7d4fc0319cb4e28ec175fc9163775a6e">QuantityArray</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a6881e220a50b6ab95192f7f263b5eee6">node_excess_</a></td></tr>
<tr class="memdesc:a6881e220a50b6ab95192f7f263b5eee6"><td class="mdescLeft">&#160;</td><td class="mdescRight">An array representing the excess for each node in graph_. <a href="#a6881e220a50b6ab95192f7f263b5eee6">More...</a><br /></td></tr>
<tr class="separator:a6881e220a50b6ab95192f7f263b5eee6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65afde65cda262fce8107f3a15d657c4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a93990798ae28a85494473072c95072d2">NodeHeightArray</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a65afde65cda262fce8107f3a15d657c4">node_potential_</a></td></tr>
<tr class="memdesc:a65afde65cda262fce8107f3a15d657c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">An array representing the height function for each node in graph_. <a href="#a65afde65cda262fce8107f3a15d657c4">More...</a><br /></td></tr>
<tr class="separator:a65afde65cda262fce8107f3a15d657c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c09a4799a59a5e2947b2da44c7d0ba3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoperations__research.html#a7d4fc0319cb4e28ec175fc9163775a6e">QuantityArray</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a4c09a4799a59a5e2947b2da44c7d0ba3">residual_arc_capacity_</a></td></tr>
<tr class="memdesc:a4c09a4799a59a5e2947b2da44c7d0ba3"><td class="mdescLeft">&#160;</td><td class="mdescRight">An array representing the residual_capacity for each arc in graph_. <a href="#a4c09a4799a59a5e2947b2da44c7d0ba3">More...</a><br /></td></tr>
<tr class="separator:a4c09a4799a59a5e2947b2da44c7d0ba3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5421b464b61e322c676935f312501af8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a11a3c0e3b614e504cbb174cf0c4a90db">ArcIndexArray</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a5421b464b61e322c676935f312501af8">first_admissible_arc_</a></td></tr>
<tr class="memdesc:a5421b464b61e322c676935f312501af8"><td class="mdescLeft">&#160;</td><td class="mdescRight">An array representing the first admissible arc for each node in graph_. <a href="#a5421b464b61e322c676935f312501af8">More...</a><br /></td></tr>
<tr class="separator:a5421b464b61e322c676935f312501af8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad52713e66db4d174006e1c3cac7d9d09"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ad52713e66db4d174006e1c3cac7d9d09">active_nodes_</a></td></tr>
<tr class="memdesc:ad52713e66db4d174006e1c3cac7d9d09"><td class="mdescLeft">&#160;</td><td class="mdescRight">A stack used for managing active nodes in the algorithm. <a href="#ad52713e66db4d174006e1c3cac7d9d09">More...</a><br /></td></tr>
<tr class="separator:ad52713e66db4d174006e1c3cac7d9d09"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7cc8b8045738632185c7c0f82eb9791f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1PriorityQueueWithRestrictedPush.html">PriorityQueueWithRestrictedPush</a>&lt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>, <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a4bfa3888f90a91610caa02c8498c6f67">NodeHeight</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a7cc8b8045738632185c7c0f82eb9791f">active_node_by_height_</a></td></tr>
<tr class="memdesc:a7cc8b8045738632185c7c0f82eb9791f"><td class="mdescLeft">&#160;</td><td class="mdescRight">A priority queue used for managing active nodes in the algorithm. <a href="#a7cc8b8045738632185c7c0f82eb9791f">More...</a><br /></td></tr>
<tr class="separator:a7cc8b8045738632185c7c0f82eb9791f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4a6b55b37ed5a95debcd86aa40370e28"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a4a6b55b37ed5a95debcd86aa40370e28">source_</a></td></tr>
<tr class="memdesc:a4a6b55b37ed5a95debcd86aa40370e28"><td class="mdescLeft">&#160;</td><td class="mdescRight">The index of the source node in graph_. <a href="#a4a6b55b37ed5a95debcd86aa40370e28">More...</a><br /></td></tr>
<tr class="separator:a4a6b55b37ed5a95debcd86aa40370e28"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f228bb0707a9ebf78dd67ee15746030"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a7f228bb0707a9ebf78dd67ee15746030">sink_</a></td></tr>
<tr class="memdesc:a7f228bb0707a9ebf78dd67ee15746030"><td class="mdescLeft">&#160;</td><td class="mdescRight">The index of the sink node in graph_. <a href="#a7f228bb0707a9ebf78dd67ee15746030">More...</a><br /></td></tr>
<tr class="separator:a7f228bb0707a9ebf78dd67ee15746030"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a784643a086180b1755f704d652f564a0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoperations__research_1_1MaxFlowStatusClass.html#aa3fbead787cfdfac0b9e7b217e06cbfb">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a784643a086180b1755f704d652f564a0">status_</a></td></tr>
<tr class="memdesc:a784643a086180b1755f704d652f564a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">The status of the problem. <a href="#a784643a086180b1755f704d652f564a0">More...</a><br /></td></tr>
<tr class="separator:a784643a086180b1755f704d652f564a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf724f9c00dee72b9b2e510e9e88e13e"><td class="memItemLeft" align="right" valign="top">std::vector&lt; bool &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#aaf724f9c00dee72b9b2e510e9e88e13e">node_in_bfs_queue_</a></td></tr>
<tr class="memdesc:aaf724f9c00dee72b9b2e510e9e88e13e"><td class="mdescLeft">&#160;</td><td class="mdescRight">BFS queue used by the <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ad3925f2137b18b1555563ed149ada740" title="Computes the best possible node potential given the current flow using a reverse breadth-first search...">GlobalUpdate()</a> function. <a href="#aaf724f9c00dee72b9b2e510e9e88e13e">More...</a><br /></td></tr>
<tr class="separator:aaf724f9c00dee72b9b2e510e9e88e13e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac0e27ffc0885628dfcc430197434c311"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ac0e27ffc0885628dfcc430197434c311">bfs_queue_</a></td></tr>
<tr class="separator:ac0e27ffc0885628dfcc430197434c311"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab3915b57ac3d28863ad3372f1598a494"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ab3915b57ac3d28863ad3372f1598a494">use_global_update_</a></td></tr>
<tr class="memdesc:ab3915b57ac3d28863ad3372f1598a494"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether or not to use <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ad3925f2137b18b1555563ed149ada740" title="Computes the best possible node potential given the current flow using a reverse breadth-first search...">GlobalUpdate()</a>. <a href="#ab3915b57ac3d28863ad3372f1598a494">More...</a><br /></td></tr>
<tr class="separator:ab3915b57ac3d28863ad3372f1598a494"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a323ba66c6b6e63c3c7165081614e2689"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a323ba66c6b6e63c3c7165081614e2689">use_two_phase_algorithm_</a></td></tr>
<tr class="memdesc:a323ba66c6b6e63c3c7165081614e2689"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether or not we use a two-phase algorithm: 1/ Only deal with nodes that can reach the sink. <a href="#a323ba66c6b6e63c3c7165081614e2689">More...</a><br /></td></tr>
<tr class="separator:a323ba66c6b6e63c3c7165081614e2689"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa44b5dfa3bad855a7a7b19750b6db748"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#aa44b5dfa3bad855a7a7b19750b6db748">process_node_by_height_</a></td></tr>
<tr class="memdesc:aa44b5dfa3bad855a7a7b19750b6db748"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether or not we use the <a class="el" href="classoperations__research_1_1PriorityQueueWithRestrictedPush.html" title="Specific but efficient priority queue implementation.">PriorityQueueWithRestrictedPush</a> to process the active nodes rather than a simple queue. <a href="#aa44b5dfa3bad855a7a7b19750b6db748">More...</a><br /></td></tr>
<tr class="separator:aa44b5dfa3bad855a7a7b19750b6db748"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a643e76aab33e0ee6c13b0b336af05352"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a643e76aab33e0ee6c13b0b336af05352">check_input_</a></td></tr>
<tr class="memdesc:a643e76aab33e0ee6c13b0b336af05352"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether or not we check the input, this is a small price to pay for robustness. <a href="#a643e76aab33e0ee6c13b0b336af05352">More...</a><br /></td></tr>
<tr class="separator:a643e76aab33e0ee6c13b0b336af05352"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a92fbc9576b457ceddeb21395181b3273"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a92fbc9576b457ceddeb21395181b3273">check_result_</a></td></tr>
<tr class="memdesc:a92fbc9576b457ceddeb21395181b3273"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether or not we check the result. <a href="#a92fbc9576b457ceddeb21395181b3273">More...</a><br /></td></tr>
<tr class="separator:a92fbc9576b457ceddeb21395181b3273"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3aae9d11f361dfd5c98dcca64987cfb9"><td class="memItemLeft" align="right" valign="top">StatsGroup&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a3aae9d11f361dfd5c98dcca64987cfb9">stats_</a></td></tr>
<tr class="memdesc:a3aae9d11f361dfd5c98dcca64987cfb9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Statistics about this class. <a href="#a3aae9d11f361dfd5c98dcca64987cfb9">More...</a><br /></td></tr>
<tr class="separator:a3aae9d11f361dfd5c98dcca64987cfb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-attribs"></a>
Static Protected Attributes</h2></td></tr>
<tr class="memitem:ac4278804a3c23b3a7f340930a81ff15f"><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ac4278804a3c23b3a7f340930a81ff15f">kMaxFlowQuantity</a></td></tr>
<tr class="memdesc:ac4278804a3c23b3a7f340930a81ff15f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum manageable flow. <a href="#ac4278804a3c23b3a7f340930a81ff15f">More...</a><br /></td></tr>
<tr class="separator:ac4278804a3c23b3a7f340930a81ff15f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename Graph&gt;<br />
class operations_research::GenericMaxFlow&lt; Graph &gt;</h3>
<p>Forward declaration. </p>
<p>Generic <a class="el" href="classoperations__research_1_1MaxFlow.html" title="Default instance MaxFlow that uses StarGraph.">MaxFlow</a> (there is a default <a class="el" href="classoperations__research_1_1MaxFlow.html" title="Default instance MaxFlow that uses StarGraph.">MaxFlow</a> specialization defined below) that works with StarGraph and all the reverse arc graphs from <a class="el" href="graph_8h.html">graph.h</a>, see the end of max_flow.cc for the exact types this class is compiled for.</p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00144">144</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="abaf68b768e58ec738030f02c288d4ee2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abaf68b768e58ec738030f02c288d4ee2">&#9670;&nbsp;</a></span>ArcIndex</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">typedef Graph::ArcIndex <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00318">318</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a11a3c0e3b614e504cbb174cf0c4a90db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a11a3c0e3b614e504cbb174cf0c4a90db">&#9670;&nbsp;</a></span>ArcIndexArray</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">typedef ZVector&lt;<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&gt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a11a3c0e3b614e504cbb174cf0c4a90db">ArcIndexArray</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00323">323</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="abaa264696c6c702be6b4a54c5b7947b8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abaa264696c6c702be6b4a54c5b7947b8">&#9670;&nbsp;</a></span>IncomingArcIterator</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">typedef Graph::IncomingArcIterator <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaa264696c6c702be6b4a54c5b7947b8">IncomingArcIterator</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00322">322</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a4bfa3888f90a91610caa02c8498c6f67"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4bfa3888f90a91610caa02c8498c6f67">&#9670;&nbsp;</a></span>NodeHeight</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a4bfa3888f90a91610caa02c8498c6f67">NodeHeight</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>The height of a node never excess 2 times the number of node, so we use the same type as a Node index. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00327">327</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a93990798ae28a85494473072c95072d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a93990798ae28a85494473072c95072d2">&#9670;&nbsp;</a></span>NodeHeightArray</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">typedef ZVector&lt;<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a4bfa3888f90a91610caa02c8498c6f67">NodeHeight</a>&gt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a93990798ae28a85494473072c95072d2">NodeHeightArray</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00328">328</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="af29cd6d6e7b334690d8ebe90ed0be410"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af29cd6d6e7b334690d8ebe90ed0be410">&#9670;&nbsp;</a></span>NodeIndex</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">typedef Graph::NodeIndex <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00317">317</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a41c3325e4b03cd0763ccf20aa857f7a0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41c3325e4b03cd0763ccf20aa857f7a0">&#9670;&nbsp;</a></span>OutgoingArcIterator</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">typedef Graph::OutgoingArcIterator <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a41c3325e4b03cd0763ccf20aa857f7a0">OutgoingArcIterator</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00319">319</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="ab6aa151eb19acac7bcbeced26a82f355"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab6aa151eb19acac7bcbeced26a82f355">&#9670;&nbsp;</a></span>OutgoingOrOppositeIncomingArcIterator</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">typedef Graph::OutgoingOrOppositeIncomingArcIterator <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ab6aa151eb19acac7bcbeced26a82f355">OutgoingOrOppositeIncomingArcIterator</a></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00321">321</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Enumeration Documentation</h2>
<a id="aa3fbead787cfdfac0b9e7b217e06cbfb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa3fbead787cfdfac0b9e7b217e06cbfb">&#9670;&nbsp;</a></span>Status</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="classoperations__research_1_1MaxFlowStatusClass.html#aa3fbead787cfdfac0b9e7b217e06cbfb">operations_research::MaxFlowStatusClass::Status</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="aa3fbead787cfdfac0b9e7b217e06cbfbac3c19ea88d51e9ddc44a20cc13e4fb74"></a>NOT_SOLVED&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="aa3fbead787cfdfac0b9e7b217e06cbfba521cd576d678a5c22f21b4a7ec2ff02b"></a>OPTIMAL&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="aa3fbead787cfdfac0b9e7b217e06cbfba288fa96697726e05e63cc28b56c57d36"></a>INT_OVERFLOW&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="aa3fbead787cfdfac0b9e7b217e06cbfba9b4b284d9cef8bc7ea112971c14584df"></a>BAD_INPUT&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="aa3fbead787cfdfac0b9e7b217e06cbfba64972e5527eb00cc4e60ce5b2f898193"></a>BAD_RESULT&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00302">302</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="ae78f6137700a6942cee3b8b5bd40817b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae78f6137700a6942cee3b8b5bd40817b">&#9670;&nbsp;</a></span>GenericMaxFlow()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::<a class="el" href="classoperations__research_1_1GenericMaxFlow.html">GenericMaxFlow</a> </td>
<td>(</td>
<td class="paramtype">const Graph *&#160;</td>
<td class="paramname"><em>graph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td>
<td class="paramname"><em>source</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td>
<td class="paramname"><em>sink</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialize a <a class="el" href="classoperations__research_1_1MaxFlow.html" title="Default instance MaxFlow that uses StarGraph.">MaxFlow</a> instance on the given graph. </p>
<p>The graph does not need to be fully built yet, but its capacity reservation are used to initialize the memory of this class. source and sink must also be valid node of graph. </p>
</div>
</div>
<a id="a6296328813067e9419925f40981f0867"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6296328813067e9419925f40981f0867">&#9670;&nbsp;</a></span>~GenericMaxFlow()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::~<a class="el" href="classoperations__research_1_1GenericMaxFlow.html">GenericMaxFlow</a> </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00335">335</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a75c3aeba25a7c62b4e237d2b34594b0e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a75c3aeba25a7c62b4e237d2b34594b0e">&#9670;&nbsp;</a></span>AugmentingPathExists()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::AugmentingPathExists </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if there exists a path from the source to the sink with remaining capacity. </p>
<p>This allows us to easily check at the end that the flow we computed is indeed optimal (provided that all the conditions tested by <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a5ceac4e6ee8eedd556f1cdec11a2b665" title="Checks whether the result is valid, i.e.">CheckResult()</a> also hold). </p>
</div>
</div>
<a id="aa094beccfd146238de41da6f8a2b2e4a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa094beccfd146238de41da6f8a2b2e4a">&#9670;&nbsp;</a></span>Capacity()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::Capacity </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the capacity of arc using the equations given in the comment on residual_arc_capacity_. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00375">375</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a6a160e49372bec143572964e6b19f444"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a160e49372bec143572964e6b19f444">&#9670;&nbsp;</a></span>CheckInputConsistency()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::CheckInputConsistency </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks the consistency of the input, i.e. </p>
<p>that capacities on the arcs are non-negative or null. </p>
</div>
</div>
<a id="a9dbc134de4c5e1d424b49f7000c713f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9dbc134de4c5e1d424b49f7000c713f4">&#9670;&nbsp;</a></span>CheckRelabelPrecondition()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::CheckRelabelPrecondition </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td>
<td class="paramname"><em>node</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if a precondition for Relabel is met, i.e. </p>
<p>the outgoing arcs of node are all either saturated or the heights of their heads are greater or equal to the height of node. </p>
</div>
</div>
<a id="a5ceac4e6ee8eedd556f1cdec11a2b665"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ceac4e6ee8eedd556f1cdec11a2b665">&#9670;&nbsp;</a></span>CheckResult()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::CheckResult </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks whether the result is valid, i.e. </p>
<p>that node excesses are all equal to zero (we have a flow) and that residual capacities are all non-negative or zero. </p>
</div>
</div>
<a id="ade3632560edb912b1758628f327dfe3d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ade3632560edb912b1758628f327dfe3d">&#9670;&nbsp;</a></span>ComputeReachableNodes()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<div class="memtemplate">
template&lt;bool reverse&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::ComputeReachableNodes </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td>
<td class="paramname"><em>start</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> &gt; *&#160;</td>
<td class="paramname"><em>result</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the set of nodes reachable from start in the residual graph or in the reverse residual graph (if reverse is true). </p>
</div>
</div>
<a id="a5b1cf7943417c669c41dc29547f8cd00"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b1cf7943417c669c41dc29547f8cd00">&#9670;&nbsp;</a></span>CreateFlowModel()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">FlowModel <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::CreateFlowModel </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the protocol buffer representation of the current problem. </p>
</div>
</div>
<a id="a57cf9ba195eb368ccd5856ef7de4dcca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a57cf9ba195eb368ccd5856ef7de4dcca">&#9670;&nbsp;</a></span>DebugString()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::string <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::DebugString </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns context concatenated with information about arc in a human-friendly way. </p>
</div>
</div>
<a id="a5a2c545458610cc9b1486ae083708574"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5a2c545458610cc9b1486ae083708574">&#9670;&nbsp;</a></span>Discharge()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::Discharge </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td>
<td class="paramname"><em>node</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Discharges an active node node by saturating its admissible adjacent arcs, if any, and by relabelling it when it becomes inactive. </p>
</div>
</div>
<a id="aef5b9fc304666691405861f4caf35f45"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aef5b9fc304666691405861f4caf35f45">&#9670;&nbsp;</a></span>Flow()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::Flow </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the flow on arc using the equations given in the comment on residual_arc_capacity_. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00365">365</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="ad411ee050c1c6a25b5b2abc42a2f0491"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad411ee050c1c6a25b5b2abc42a2f0491">&#9670;&nbsp;</a></span>GetAndRemoveFirstActiveNode()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::GetAndRemoveFirstActiveNode </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the first element from the active node container. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00460">460</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a90f1c23703ab4e69d7e42549ea005464"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a90f1c23703ab4e69d7e42549ea005464">&#9670;&nbsp;</a></span>GetOptimalFlow()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::GetOptimalFlow </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the total flow found by the algorithm. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00361">361</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a8c16f1156b2e038ca0d3f8ba96490ab5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8c16f1156b2e038ca0d3f8ba96490ab5">&#9670;&nbsp;</a></span>GetSinkNodeIndex()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::GetSinkNodeIndex </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the index of the node corresponding to the sink of the network. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00349">349</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="ad7892ad5aa8338015f320267fb7f298f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad7892ad5aa8338015f320267fb7f298f">&#9670;&nbsp;</a></span>GetSinkSideMinCut()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::GetSinkSideMinCut </td>
<td>(</td>
<td class="paramtype">std::vector&lt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> &gt; *&#160;</td>
<td class="paramname"><em>result</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the nodes that can reach the sink in the residual graph, the outgoing arcs of this set form a minimum cut. </p>
<p>Note that if this is the complement of GetNodeReachableFromSource(), then the min-cut is unique.</p>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000045">Todo:</a></b></dt><dd>(user): In the two-phases algorithm, we can get this minimum cut without doing the second phase. Add an option for this if there is a need to, note that the second phase is pretty fast so the gain will be small. </dd></dl>
</div>
</div>
<a id="aeeb216a2384f75c7a46cf54de35027d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeeb216a2384f75c7a46cf54de35027d2">&#9670;&nbsp;</a></span>GetSourceNodeIndex()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::GetSourceNodeIndex </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the index of the node corresponding to the source of the network. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00346">346</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a022da70970a497438cd0304cf1c6efd9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a022da70970a497438cd0304cf1c6efd9">&#9670;&nbsp;</a></span>GetSourceSideMinCut()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::GetSourceSideMinCut </td>
<td>(</td>
<td class="paramtype">std::vector&lt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> &gt; *&#160;</td>
<td class="paramname"><em>result</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the nodes reachable from the source in the residual graph, the outgoing arcs of this set form a minimum cut. </p>
</div>
</div>
<a id="ad3925f2137b18b1555563ed149ada740"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad3925f2137b18b1555563ed149ada740">&#9670;&nbsp;</a></span>GlobalUpdate()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::GlobalUpdate </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Computes the best possible node potential given the current flow using a reverse breadth-first search from the sink in the reverse residual graph. </p>
<p>This is an implementation of the global update heuristic mentioned in many max-flow papers. See for instance: B.V. Cherkassky, A.V. Goldberg, "On
implementing push-relabel methods for the maximum flow problem", Algorithmica, 19:390-410, 1997. <a href="ftp://reports.stanford.edu/pub/cstr/reports/cs/tr/94/1523/CS-TR-94-1523.pdf">ftp://reports.stanford.edu/pub/cstr/reports/cs/tr/94/1523/CS-TR-94-1523.pdf</a> </p>
</div>
</div>
<a id="a8f83ce5b69d2e3d4cbf314ed6b3d01a6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8f83ce5b69d2e3d4cbf314ed6b3d01a6">&#9670;&nbsp;</a></span>graph()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const Graph* <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::graph </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the graph associated to the current object. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00338">338</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="ad4a6ec3deadedd6c027b8c0fbbdac88d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad4a6ec3deadedd6c027b8c0fbbdac88d">&#9670;&nbsp;</a></span>Head()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::Head </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Handy member functions to make the code more compact. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00532">532</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a3b47bff3c2733b198d34aeaa0cbcfa19"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3b47bff3c2733b198d34aeaa0cbcfa19">&#9670;&nbsp;</a></span>InitializeActiveNodeContainer()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::InitializeActiveNodeContainer </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes the container active_nodes_. </p>
</div>
</div>
<a id="a20139b839cd5764939afc8df968a2484"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a20139b839cd5764939afc8df968a2484">&#9670;&nbsp;</a></span>InitializePreflow()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::InitializePreflow </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes the preflow to a state that enables to run Refine. </p>
</div>
</div>
<a id="a5b535e0a581ca57102d6c495a10bc911"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b535e0a581ca57102d6c495a10bc911">&#9670;&nbsp;</a></span>IsActive()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::IsActive </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td>
<td class="paramname"><em>node</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if node is active, i.e. </p>
<p>if its excess is positive and it is neither the source or the sink of the graph. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00437">437</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="aecd4716fa878055b30386f0f97a0d907"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aecd4716fa878055b30386f0f97a0d907">&#9670;&nbsp;</a></span>IsAdmissible()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::IsAdmissible </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if arc is admissible. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00430">430</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="aab64a5e41b9e15ab0953a59ef9fd2f49"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aab64a5e41b9e15ab0953a59ef9fd2f49">&#9670;&nbsp;</a></span>IsArcDirect()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::IsArcDirect </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ace677adc9ba14e72018a7aa78955df18"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ace677adc9ba14e72018a7aa78955df18">&#9670;&nbsp;</a></span>IsArcValid()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::IsArcValid </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a3653a3df1b94e4150486b5149d8eaae7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3653a3df1b94e4150486b5149d8eaae7">&#9670;&nbsp;</a></span>IsEmptyActiveNodeContainer()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::IsEmptyActiveNodeContainer </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Check the emptiness of the container. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00477">477</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a15c425face4a4d1697c7ba298a727192"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15c425face4a4d1697c7ba298a727192">&#9670;&nbsp;</a></span>Opposite()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::Opposite </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="acc608bd04efcbcc5b72b76795f5d49d8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acc608bd04efcbcc5b72b76795f5d49d8">&#9670;&nbsp;</a></span>ProcessNodeByHeight()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::ProcessNodeByHeight </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>value</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00421">421</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a4cc032f9987eb1ae9eaa8ebb013f671b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4cc032f9987eb1ae9eaa8ebb013f671b">&#9670;&nbsp;</a></span>PushActiveNode()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::PushActiveNode </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> &amp;&#160;</td>
<td class="paramname"><em>node</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Push element to the active node container. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00468">468</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a1c31c96effb1f91f800895be2339045b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c31c96effb1f91f800895be2339045b">&#9670;&nbsp;</a></span>PushFlow()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::PushFlow </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a>&#160;</td>
<td class="paramname"><em>flow</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Pushes flow on arc, i.e. </p>
<p>consumes flow on residual_arc_capacity_[arc], and consumes -flow on residual_arc_capacity_[Opposite(arc)]. Updates node_excess_ at the tail and head of arc accordingly. </p>
</div>
</div>
<a id="a05eb488b184996513248b0dffca59600"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a05eb488b184996513248b0dffca59600">&#9670;&nbsp;</a></span>PushFlowExcessBackToSource()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::PushFlowExcessBackToSource </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Clears the flow excess at each node by pushing the flow back to the source: </p>
<ul>
<li>Do a depth-first search from the source in the direct graph to cancel flow cycles.</li>
<li>Then, return flow excess along the depth-first search tree (by pushing the flow in the reverse dfs topological order). The theoretical complexity is O(mn), but it is a lot faster in practice. </li>
</ul>
</div>
</div>
<a id="a1061c1ce94ccc0d379390b8542bfaa23"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1061c1ce94ccc0d379390b8542bfaa23">&#9670;&nbsp;</a></span>Refine()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::Refine </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Performs optimization step. </p>
</div>
</div>
<a id="a91d754521a7d43dd215e5d6200ec1062"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a91d754521a7d43dd215e5d6200ec1062">&#9670;&nbsp;</a></span>RefineWithGlobalUpdate()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::RefineWithGlobalUpdate </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="aa70e526f9be229e52bf598d9cd0e7406"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa70e526f9be229e52bf598d9cd0e7406">&#9670;&nbsp;</a></span>Relabel()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::Relabel </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&#160;</td>
<td class="paramname"><em>node</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Relabels a node, i.e. </p>
<p>increases its height by the minimum necessary amount. This version of Relabel is relaxed in a way such that if an admissible arc exists at the current node height, then the node is not relabeled. This enables us to deal with wrong values of first_admissible_arc_[node] when updating it is too costly. </p>
</div>
</div>
<a id="a2d2ffca7a04ecd2975025cb34a3898cb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2d2ffca7a04ecd2975025cb34a3898cb">&#9670;&nbsp;</a></span>SaturateOutgoingArcsFromSource()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::SaturateOutgoingArcsFromSource </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Tries to saturate all the outgoing arcs from the source that can reach the sink. </p>
<p>Most of the time, we can do that in one go, except when more flow than kMaxFlowQuantity can be pushed out of the source in which case we have to be careful. Returns true if some flow was pushed. </p>
</div>
</div>
<a id="a05f2661c573eb445212f4eddd694fc2f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a05f2661c573eb445212f4eddd694fc2f">&#9670;&nbsp;</a></span>SetArcCapacity()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::SetArcCapacity </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a>&#160;</td>
<td class="paramname"><em>new_capacity</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the capacity for arc to new_capacity. </p>
</div>
</div>
<a id="a9a357ac0cc6e451b5b1b81a9abdeb49b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9a357ac0cc6e451b5b1b81a9abdeb49b">&#9670;&nbsp;</a></span>SetArcFlow()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::SetArcFlow </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a>&#160;</td>
<td class="paramname"><em>new_flow</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the flow for arc. </p>
</div>
</div>
<a id="a0c56ff7a0c8bac88e8f6e0da3689e838"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0c56ff7a0c8bac88e8f6e0da3689e838">&#9670;&nbsp;</a></span>SetCapacityAndClearFlow()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::SetCapacityAndClearFlow </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a>&#160;</td>
<td class="paramname"><em>capacity</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the capacity of arc to 'capacity' and clears the flow on arc. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00442">442</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a3aaa8be2e8b64b746e6b46fa6463bbde"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3aaa8be2e8b64b746e6b46fa6463bbde">&#9670;&nbsp;</a></span>SetCheckInput()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::SetCheckInput </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>value</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00419">419</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="ad80ce21a3088b4798da0eae774b0bab6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad80ce21a3088b4798da0eae774b0bab6">&#9670;&nbsp;</a></span>SetCheckResult()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::SetCheckResult </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>value</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00420">420</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a1055514c9f93a7ffeea0ae9e8a6a7f58"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1055514c9f93a7ffeea0ae9e8a6a7f58">&#9670;&nbsp;</a></span>SetUseGlobalUpdate()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::SetUseGlobalUpdate </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>value</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the different algorithm options. </p>
<p>All default to true. See the corresponding variable declaration below for more details. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00414">414</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a0497a8b934a2aa9f7307428736f72522"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0497a8b934a2aa9f7307428736f72522">&#9670;&nbsp;</a></span>SetUseTwoPhaseAlgorithm()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::SetUseTwoPhaseAlgorithm </td>
<td>(</td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>value</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00418">418</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a1da59e63f4d617578a0dc218d7f2f3e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1da59e63f4d617578a0dc218d7f2f3e9">&#9670;&nbsp;</a></span>Solve()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::Solve </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if a maximum flow was solved. </p>
</div>
</div>
<a id="a9662fa5cf2007a62968e6c22fb8a4564"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9662fa5cf2007a62968e6c22fb8a4564">&#9670;&nbsp;</a></span>status()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1MaxFlowStatusClass.html#aa3fbead787cfdfac0b9e7b217e06cbfb">Status</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::status </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the status of last call to <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a1da59e63f4d617578a0dc218d7f2f3e9" title="Returns true if a maximum flow was solved.">Solve()</a>. </p>
<p>NOT_SOLVED is returned if <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a1da59e63f4d617578a0dc218d7f2f3e9" title="Returns true if a maximum flow was solved.">Solve()</a> has never been called or if the problem has been modified in such a way that the previous solution becomes invalid. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00343">343</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="ac28ab380716ec139afa31d485bbbd068"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac28ab380716ec139afa31d485bbbd068">&#9670;&nbsp;</a></span>Tail()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::Tail </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#abaf68b768e58ec738030f02c288d4ee2">ArcIndex</a>&#160;</td>
<td class="paramname"><em>arc</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00533">533</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a7cc8b8045738632185c7c0f82eb9791f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7cc8b8045738632185c7c0f82eb9791f">&#9670;&nbsp;</a></span>active_node_by_height_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1PriorityQueueWithRestrictedPush.html">PriorityQueueWithRestrictedPush</a>&lt;<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>, <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a4bfa3888f90a91610caa02c8498c6f67">NodeHeight</a>&gt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::active_node_by_height_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>A priority queue used for managing active nodes in the algorithm. </p>
<p>It allows to select the active node with highest height before each <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a5a2c545458610cc9b1486ae083708574" title="Discharges an active node node by saturating its admissible adjacent arcs, if any,...">Discharge()</a>. Moreover, since all pushes from this node will be to nodes with height greater or equal to the initial discharged node height minus one, the <a class="el" href="classoperations__research_1_1PriorityQueueWithRestrictedPush.html" title="Specific but efficient priority queue implementation.">PriorityQueueWithRestrictedPush</a> is a perfect fit. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00597">597</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="ad52713e66db4d174006e1c3cac7d9d09"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad52713e66db4d174006e1c3cac7d9d09">&#9670;&nbsp;</a></span>active_nodes_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&gt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::active_nodes_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>A stack used for managing active nodes in the algorithm. </p>
<dl class="section note"><dt>Note</dt><dd>the papers cited above recommend the use of a queue, but benchmarking so far has not proved it is better. In particular, processing nodes in LIFO order has better cache locality. </dd></dl>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00590">590</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="ac0e27ffc0885628dfcc430197434c311"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac0e27ffc0885628dfcc430197434c311">&#9670;&nbsp;</a></span>bfs_queue_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a>&gt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::bfs_queue_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00611">611</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a643e76aab33e0ee6c13b0b336af05352"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a643e76aab33e0ee6c13b0b336af05352">&#9670;&nbsp;</a></span>check_input_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::check_input_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Whether or not we check the input, this is a small price to pay for robustness. </p>
<p>Disable only if you know the input is valid because an invalid input can cause the algorithm to run into an infinite loop! </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00634">634</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a92fbc9576b457ceddeb21395181b3273"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a92fbc9576b457ceddeb21395181b3273">&#9670;&nbsp;</a></span>check_result_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::check_result_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Whether or not we check the result. </p>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000046">Todo:</a></b></dt><dd>(user): Make the check more exhaustive by checking the optimality? </dd></dl>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00638">638</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a5421b464b61e322c676935f312501af8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5421b464b61e322c676935f312501af8">&#9670;&nbsp;</a></span>first_admissible_arc_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a11a3c0e3b614e504cbb174cf0c4a90db">ArcIndexArray</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::first_admissible_arc_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>An array representing the first admissible arc for each node in graph_. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00584">584</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a27da86de84ba65849c8aebf7aa153f91"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a27da86de84ba65849c8aebf7aa153f91">&#9670;&nbsp;</a></span>graph_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const Graph* <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::graph_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>A pointer to the graph passed as argument. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00547">547</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="ac4278804a3c23b3a7f340930a81ff15f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac4278804a3c23b3a7f340930a81ff15f">&#9670;&nbsp;</a></span>kMaxFlowQuantity</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="namespaceoperations__research.html#a5841ff601ab08548afb15c45b2245de7">FlowQuantity</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::kMaxFlowQuantity</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Maximum manageable flow. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00544">544</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a6881e220a50b6ab95192f7f263b5eee6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6881e220a50b6ab95192f7f263b5eee6">&#9670;&nbsp;</a></span>node_excess_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespaceoperations__research.html#a7d4fc0319cb4e28ec175fc9163775a6e">QuantityArray</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::node_excess_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>An array representing the excess for each node in graph_. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00550">550</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="aaf724f9c00dee72b9b2e510e9e88e13e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf724f9c00dee72b9b2e510e9e88e13e">&#9670;&nbsp;</a></span>node_in_bfs_queue_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;bool&gt; <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::node_in_bfs_queue_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>BFS queue used by the <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ad3925f2137b18b1555563ed149ada740" title="Computes the best possible node potential given the current flow using a reverse breadth-first search...">GlobalUpdate()</a> function. </p>
<p>We do not use a C++ queue because we need access to the vector for different optimizations. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00610">610</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a65afde65cda262fce8107f3a15d657c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65afde65cda262fce8107f3a15d657c4">&#9670;&nbsp;</a></span>node_potential_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a93990798ae28a85494473072c95072d2">NodeHeightArray</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::node_potential_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>An array representing the height function for each node in graph_. </p>
<p>For a given node, this is a lower bound on the shortest path length from this node to the sink in the residual network. The height of a node always goes up during the course of a <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a1da59e63f4d617578a0dc218d7f2f3e9" title="Returns true if a maximum flow was solved.">Solve()</a>.</p>
<p>Since initially we saturate all the outgoing arcs of the source, we can never reach the sink from the source in the residual graph. Initially we set the height of the source to n (the number of node of the graph) and it never changes. If a node as an height &gt;= n, then this node can't reach the sink and its height minus n is a lower bound on the shortest path length from this node to the source in the residual graph. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00563">563</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="aa44b5dfa3bad855a7a7b19750b6db748"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa44b5dfa3bad855a7a7b19750b6db748">&#9670;&nbsp;</a></span>process_node_by_height_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::process_node_by_height_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Whether or not we use the <a class="el" href="classoperations__research_1_1PriorityQueueWithRestrictedPush.html" title="Specific but efficient priority queue implementation.">PriorityQueueWithRestrictedPush</a> to process the active nodes rather than a simple queue. </p>
<p>This can only be true if use_global_update_ is true.</p>
<p>Note(user): using a template will be slightly faster, but since we test this in a non-critical path, this only has a minor impact. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00629">629</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a4c09a4799a59a5e2947b2da44c7d0ba3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4c09a4799a59a5e2947b2da44c7d0ba3">&#9670;&nbsp;</a></span>residual_arc_capacity_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespaceoperations__research.html#a7d4fc0319cb4e28ec175fc9163775a6e">QuantityArray</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::residual_arc_capacity_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>An array representing the residual_capacity for each arc in graph_. </p>
<p>Residual capacities enable one to represent the capacity and flow for all arcs in the graph in the following manner. For all arc, residual_arc_capacity_[arc] = capacity[arc] - flow[arc] Moreover, for reverse arcs, capacity[arc] = 0 by definition, Also flow[Opposite(arc)] = -flow[arc] by definition. Therefore:</p><ul>
<li>for a direct arc: flow[arc] = 0 - flow[Opposite(arc)] = capacity[Opposite(arc)] - flow[Opposite(arc)] = residual_arc_capacity_[Opposite(arc)]</li>
<li>for a reverse arc: flow[arc] = -residual_arc_capacity_[arc] Using these facts enables one to only maintain residual_arc_capacity_, instead of both capacity and flow, for each direct and indirect arc. This reduces the amount of memory for this information by a factor 2. </li>
</ul>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00581">581</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a7f228bb0707a9ebf78dd67ee15746030"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7f228bb0707a9ebf78dd67ee15746030">&#9670;&nbsp;</a></span>sink_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::sink_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The index of the sink node in graph_. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00603">603</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a4a6b55b37ed5a95debcd86aa40370e28"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4a6b55b37ed5a95debcd86aa40370e28">&#9670;&nbsp;</a></span>source_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1GenericMaxFlow.html#af29cd6d6e7b334690d8ebe90ed0be410">NodeIndex</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::source_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The index of the source node in graph_. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00600">600</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a3aae9d11f361dfd5c98dcca64987cfb9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3aae9d11f361dfd5c98dcca64987cfb9">&#9670;&nbsp;</a></span>stats_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">StatsGroup <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::stats_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">mutable</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Statistics about this class. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00641">641</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a784643a086180b1755f704d652f564a0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a784643a086180b1755f704d652f564a0">&#9670;&nbsp;</a></span>status_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classoperations__research_1_1MaxFlowStatusClass.html#aa3fbead787cfdfac0b9e7b217e06cbfb">Status</a> <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::status_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The status of the problem. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00606">606</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="ab3915b57ac3d28863ad3372f1598a494"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab3915b57ac3d28863ad3372f1598a494">&#9670;&nbsp;</a></span>use_global_update_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::use_global_update_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Whether or not to use <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#ad3925f2137b18b1555563ed149ada740" title="Computes the best possible node potential given the current flow using a reverse breadth-first search...">GlobalUpdate()</a>. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00614">614</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<a id="a323ba66c6b6e63c3c7165081614e2689"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a323ba66c6b6e63c3c7165081614e2689">&#9670;&nbsp;</a></span>use_two_phase_algorithm_</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Graph&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classoperations__research_1_1GenericMaxFlow.html">operations_research::GenericMaxFlow</a>&lt; Graph &gt;::use_two_phase_algorithm_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Whether or not we use a two-phase algorithm: 1/ Only deal with nodes that can reach the sink. </p>
<p>At the end we know the value of the maximum flow and we have a min-cut. 2/ Call <a class="el" href="classoperations__research_1_1GenericMaxFlow.html#a05eb488b184996513248b0dffca59600" title="Clears the flow excess at each node by pushing the flow back to the source:">PushFlowExcessBackToSource()</a> to obtain a max-flow. This is usually a lot faster than the first phase. </p>
<p class="definition">Definition at line <a class="el" href="max__flow_8h_source.html#l00621">621</a> of file <a class="el" href="max__flow_8h_source.html">max_flow.h</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="max__flow_8h_source.html">max_flow.h</a></li>
</ul>
</div><!-- contents -->
</div>
<div id="footer-container">
<div id="footer">
</div>
</div>
</body>
</html>