Krita Source Code Documentation
Loading...
Searching...
No Matches
boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap > Class Template Reference

#include <patched_boykov_kolmogorov_max_flow.hpp>

Public Member Functions

 bk_max_flow (Graph &g, EdgeCapacityMap cap, ResidualCapacityEdgeMap res, ReverseEdgeMap rev, PredecessorMap pre, ColorMap color, DistanceMap dist, IndexMap idx, vertex_descriptor src, vertex_descriptor sink)
 
tEdgeVal max_flow ()
 

Protected Member Functions

void add_active_node (vertex_descriptor v)
 
void adopt ()
 
void augment (edge_descriptor e)
 
void augment_direct_paths ()
 
tEdgeVal find_bottleneck (edge_descriptor e)
 
void finish_node (vertex_descriptor v)
 
edge_descriptor get_edge_to_parent (vertex_descriptor v) const
 
vertex_descriptor get_next_active_node ()
 
tColorValue get_tree (vertex_descriptor v) const
 
std::pair< edge_descriptor, bool > grow ()
 
bool has_parent (vertex_descriptor v) const
 
bool has_sink_connect (vertex_descriptor v)
 
bool has_source_connect (vertex_descriptor v)
 
bool is_closer_to_terminal (vertex_descriptor p, vertex_descriptor q)
 
void remove_active_node (vertex_descriptor v)
 
void set_edge_to_parent (vertex_descriptor v, edge_descriptor f_edge_to_parent)
 
void set_no_parent (vertex_descriptor v)
 
void set_tree (vertex_descriptor v, tColorValue t)
 

Protected Attributes

tQueue m_active_nodes
 
EdgeCapacityMap m_cap_map
 
tQueue m_child_orphans
 
DistanceMap m_dist_map
 
tEdgeVal m_flow
 
Graph & m_g
 
iterator_property_map< std::vector< bool >::iterator, IndexMap > m_has_parent_map
 
std::vector< bool > m_has_parent_vec
 
iterator_property_map< std::vector< bool >::iterator, IndexMap > m_in_active_list_map
 
std::vector< bool > m_in_active_list_vec
 
IndexMap m_index_map
 
out_edge_iterator m_last_grow_edge_end
 
out_edge_iterator m_last_grow_edge_it
 
vertex_descriptor m_last_grow_vertex
 
std::list< vertex_descriptorm_orphans
 
PredecessorMap m_pre_map
 
ResidualCapacityEdgeMap m_res_cap_map
 
ReverseEdgeMap m_rev_edge_map
 
vertex_descriptor m_sink
 
vertex_descriptor m_source
 
long m_time
 
iterator_property_map< std::vector< long >::iterator, IndexMap > m_time_map
 
std::vector< long > m_time_vec
 
ColorMap m_tree_map
 

Private Types

typedef tGraphTraits::edge_descriptor edge_descriptor
 
typedef tGraphTraits::edge_iterator edge_iterator
 
typedef tGraphTraits::out_edge_iterator out_edge_iterator
 
typedef color_traits< tColorValuetColorTraits
 
typedef property_traits< ColorMap >::value_type tColorValue
 
typedef property_traits< DistanceMap >::value_type tDistanceVal
 
typedef property_traits< EdgeCapacityMap >::value_type tEdgeVal
 
typedef graph_traits< Graph > tGraphTraits
 
typedef boost::queue< vertex_descriptortQueue
 
typedef tGraphTraits::vertex_descriptor vertex_descriptor
 
typedef tGraphTraits::vertex_iterator vertex_iterator
 

Detailed Description

template<class Graph, class EdgeCapacityMap, class ResidualCapacityEdgeMap, class ReverseEdgeMap, class PredecessorMap, class ColorMap, class DistanceMap, class IndexMap>
class boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >

Definition at line 51 of file patched_boykov_kolmogorov_max_flow.hpp.

Member Typedef Documentation

◆ edge_descriptor

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
typedef tGraphTraits::edge_descriptor boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::edge_descriptor
private

Definition at line 56 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ edge_iterator

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
typedef tGraphTraits::edge_iterator boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::edge_iterator
private

Definition at line 57 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ out_edge_iterator

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
typedef tGraphTraits::out_edge_iterator boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::out_edge_iterator
private

Definition at line 58 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ tColorTraits

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
typedef color_traits<tColorValue> boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::tColorTraits
private

Definition at line 61 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ tColorValue

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
typedef property_traits<ColorMap>::value_type boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::tColorValue
private

Definition at line 60 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ tDistanceVal

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
typedef property_traits<DistanceMap>::value_type boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::tDistanceVal
private

Definition at line 62 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ tEdgeVal

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
typedef property_traits<EdgeCapacityMap>::value_type boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::tEdgeVal
private

Definition at line 52 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ tGraphTraits

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
typedef graph_traits<Graph> boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::tGraphTraits
private

Definition at line 53 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ tQueue

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
typedef boost::queue<vertex_descriptor> boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::tQueue
private

Definition at line 59 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ vertex_descriptor

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
typedef tGraphTraits::vertex_descriptor boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::vertex_descriptor
private

Definition at line 55 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ vertex_iterator

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
typedef tGraphTraits::vertex_iterator boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::vertex_iterator
private

Definition at line 54 of file patched_boykov_kolmogorov_max_flow.hpp.

Constructor & Destructor Documentation

◆ bk_max_flow()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::bk_max_flow ( Graph & g,
EdgeCapacityMap cap,
ResidualCapacityEdgeMap res,
ReverseEdgeMap rev,
PredecessorMap pre,
ColorMap color,
DistanceMap dist,
IndexMap idx,
vertex_descriptor src,
vertex_descriptor sink )
inline

Definition at line 65 of file patched_boykov_kolmogorov_max_flow.hpp.

74 :
75 m_g(g),
76 m_index_map(idx),
77 m_cap_map(cap),
78 m_res_cap_map(res),
79 m_rev_edge_map(rev),
80 m_pre_map(pre),
81 m_tree_map(color),
82 m_dist_map(dist),
83 m_source(src),
84 m_sink(sink),
86 m_in_active_list_vec(num_vertices(g), false),
87 m_in_active_list_map(make_iterator_property_map(m_in_active_list_vec.begin(), m_index_map)),
88 m_has_parent_vec(num_vertices(g), false),
89 m_has_parent_map(make_iterator_property_map(m_has_parent_vec.begin(), m_index_map)),
90 m_time_vec(num_vertices(g), 0),
91 m_time_map(make_iterator_property_map(m_time_vec.begin(), m_index_map)),
92 m_flow(0),
93 m_time(1),
94 m_last_grow_vertex(graph_traits<Graph>::null_vertex()){
95 // initialize the color-map with gray-values
96 vertex_iterator vi, v_end;
97 for(boost::tie(vi, v_end) = vertices(m_g); vi != v_end; ++vi){
98 set_tree(*vi, tColorTraits::gray());
99 }
100 // Initialize flow to zero which means initializing
101 // the residual capacity equal to the capacity
102 edge_iterator ei, e_end;
103 for(boost::tie(ei, e_end) = edges(m_g); ei != e_end; ++ei) {
104 put(m_res_cap_map, *ei, get(m_cap_map, *ei));
105 BOOST_ASSERT(get(m_rev_edge_map, get(m_rev_edge_map, *ei)) == *ei); //check if the reverse edge map is build up properly
106 }
107 //init the search trees with the two terminals
108 set_tree(m_source, tColorTraits::black());
109 set_tree(m_sink, tColorTraits::white());
111 put(m_time_map, m_sink, 1);
112 }
VertexDescriptor get(PredecessorMap const &m, VertexDescriptor v)
void put(PredecessorMap &m, VertexDescriptor key, VertexDescriptor value)
iterator_property_map< std::vector< long >::iterator, IndexMap > m_time_map
iterator_property_map< std::vector< bool >::iterator, IndexMap > m_has_parent_map
tGraphTraits::vertex_iterator vertex_iterator
iterator_property_map< std::vector< bool >::iterator, IndexMap > m_in_active_list_map
void set_tree(vertex_descriptor v, tColorValue t)

References get(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_cap_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_g, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_res_cap_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_rev_edge_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_sink, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_source, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time_map, put(), and boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_tree().

Member Function Documentation

◆ add_active_node()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
void boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::add_active_node ( vertex_descriptor v)
inlineprotected

◆ adopt()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
void boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::adopt ( )
inlineprotected

rebuild search trees empty the queue of orphans, and find new parents for them or just drop them from the search trees

Definition at line 390 of file patched_boykov_kolmogorov_max_flow.hpp.

390 {
391 while(!m_orphans.empty() || !m_child_orphans.empty()){
392 vertex_descriptor current_node;
393 if(m_child_orphans.empty()){
394 //get the next orphan from the main-queue and remove it
395 current_node = m_orphans.front();
396 m_orphans.pop_front();
397 } else{
398 current_node = m_child_orphans.front();
399 m_child_orphans.pop();
400 }
401 if(get_tree(current_node) == tColorTraits::black()){
402 //we're in the source-tree
403 tDistanceVal min_distance = (std::numeric_limits<tDistanceVal>::max)();
404 edge_descriptor new_parent_edge;
405 out_edge_iterator ei, e_end;
406 for(boost::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){
407 const edge_descriptor in_edge = get(m_rev_edge_map, *ei);
408 BOOST_ASSERT(target(in_edge, m_g) == current_node); //we should be the target of this edge
409 if(get(m_res_cap_map, in_edge) > 0){
410 vertex_descriptor other_node = source(in_edge, m_g);
411 if(get_tree(other_node) == tColorTraits::black() && has_source_connect(other_node)){
412 if(get(m_dist_map, other_node) < min_distance){
413 min_distance = get(m_dist_map, other_node);
414 new_parent_edge = in_edge;
415 }
416 }
417 }
418 }
419 if(min_distance != (std::numeric_limits<tDistanceVal>::max)()){
420 set_edge_to_parent(current_node, new_parent_edge);
421 put(m_dist_map, current_node, min_distance + 1);
422 put(m_time_map, current_node, m_time);
423 } else{
424 put(m_time_map, current_node, 0);
425 for(boost::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){
426 edge_descriptor in_edge = get(m_rev_edge_map, *ei);
427 vertex_descriptor other_node = source(in_edge, m_g);
428 if(get_tree(other_node) == tColorTraits::black() && other_node != m_source){
429 if(get(m_res_cap_map, in_edge) > 0){
430 add_active_node(other_node);
431 }
432 if(has_parent(other_node) && source(get_edge_to_parent(other_node), m_g) == current_node){
433 //we are the parent of that node
434 //it has to find a new parent, too
435 set_no_parent(other_node);
436 m_child_orphans.push(other_node);
437 }
438 }
439 }
440 set_tree(current_node, tColorTraits::gray());
441 } //no parent found
442 } //source-tree-adoption
443 else{
444 //now we should be in the sink-tree, check that...
445 BOOST_ASSERT(get_tree(current_node) == tColorTraits::white());
446 out_edge_iterator ei, e_end;
447 edge_descriptor new_parent_edge;
448 tDistanceVal min_distance = (std::numeric_limits<tDistanceVal>::max)();
449 for(boost::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){
450 const edge_descriptor out_edge = *ei;
451 if(get(m_res_cap_map, out_edge) > 0){
452 const vertex_descriptor other_node = target(out_edge, m_g);
453 if(get_tree(other_node) == tColorTraits::white() && has_sink_connect(other_node))
454 if(get(m_dist_map, other_node) < min_distance){
455 min_distance = get(m_dist_map, other_node);
456 new_parent_edge = out_edge;
457 }
458 }
459 }
460 if(min_distance != (std::numeric_limits<tDistanceVal>::max)()){
461 set_edge_to_parent(current_node, new_parent_edge);
462 put(m_dist_map, current_node, min_distance + 1);
463 put(m_time_map, current_node, m_time);
464 } else{
465 put(m_time_map, current_node, 0);
466 for(boost::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){
467 const edge_descriptor out_edge = *ei;
468 const vertex_descriptor other_node = target(out_edge, m_g);
469 if(get_tree(other_node) == tColorTraits::white() && other_node != m_sink){
470 if(get(m_res_cap_map, out_edge) > 0){
471 add_active_node(other_node);
472 }
473 if(has_parent(other_node) && target(get_edge_to_parent(other_node), m_g) == current_node){
474 //we were it's parent, so it has to find a new one, too
475 set_no_parent(other_node);
476 m_child_orphans.push(other_node);
477 }
478 }
479 }
480 set_tree(current_node, tColorTraits::gray());
481 } //no parent found
482 } //sink-tree adoption
483 } //while !orphans.empty()
484 } //adopt
std::pair< KisMagneticGraph::out_edge_iterator, KisMagneticGraph::out_edge_iterator > out_edges(typename KisMagneticGraph::vertex_descriptor v, KisMagneticGraph g)
KisMagneticGraph::vertex_descriptor target(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
property_traits< DistanceMap >::value_type tDistanceVal
void set_edge_to_parent(vertex_descriptor v, edge_descriptor f_edge_to_parent)
tGraphTraits::vertex_descriptor vertex_descriptor
tGraphTraits::edge_descriptor edge_descriptor
tGraphTraits::out_edge_iterator out_edge_iterator
edge_descriptor get_edge_to_parent(vertex_descriptor v) const

References boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::add_active_node(), get(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_edge_to_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_tree(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::has_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::has_sink_connect(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::has_source_connect(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_child_orphans, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_dist_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_g, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_orphans, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_res_cap_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_rev_edge_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_sink, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_source, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time_map, out_edges(), put(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_edge_to_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_no_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_tree(), source(), and target().

◆ augment()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
void boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::augment ( edge_descriptor e)
inlineprotected

augments path from s->t and updates residual graph source(e, m_g) is the end of the path found in the source-tree target(e, m_g) is the beginning of the path found in the sink-tree this phase generates orphans on saturated edges, if the attached verts are from different search-trees orphans are ordered in distance to sink/source. first the farthest from the source are front_inserted into the orphans list, and after that the sink-tree-orphans are front_inserted. when going to adoption stage the orphans are popped_front, and so we process the nearest verts to the terminals first

Definition at line 310 of file patched_boykov_kolmogorov_max_flow.hpp.

310 {
311 BOOST_ASSERT(get_tree(target(e, m_g)) == tColorTraits::white());
312 BOOST_ASSERT(get_tree(source(e, m_g)) == tColorTraits::black());
313 BOOST_ASSERT(m_orphans.empty());
314
315 const tEdgeVal bottleneck = find_bottleneck(e);
316 //now we push the found flow through the path
317 //for each edge we saturate we have to look for the verts that belong to that edge, one of them becomes an orphans
318 //now process the connecting edge
319 put(m_res_cap_map, e, get(m_res_cap_map, e) - bottleneck);
320 BOOST_ASSERT(get(m_res_cap_map, e) >= 0);
322
323 //now we follow the path back to the source
324 vertex_descriptor current_node = source(e, m_g);
325 while(current_node != m_source){
326 edge_descriptor pred = get_edge_to_parent(current_node);
327 const tEdgeVal new_pred_cap = get(m_res_cap_map, pred) - bottleneck;
328 put(m_res_cap_map, pred, new_pred_cap);
329 BOOST_ASSERT(get(m_res_cap_map, pred) >= 0);
330
331 const edge_descriptor pred_rev = get(m_rev_edge_map, pred);
332 put(m_res_cap_map, pred_rev, get(m_res_cap_map, pred_rev) + bottleneck);
333
334 if(new_pred_cap == 0){
335 set_no_parent(current_node);
336 m_orphans.push_front(current_node);
337 }
338 current_node = source(pred, m_g);
339 }
340 //then go forward in the sink-tree
341 current_node = target(e, m_g);
342 while(current_node != m_sink){
343 edge_descriptor pred = get_edge_to_parent(current_node);
344 const tEdgeVal new_pred_cap = get(m_res_cap_map, pred) - bottleneck;
345 put(m_res_cap_map, pred, new_pred_cap);
346 BOOST_ASSERT(get(m_res_cap_map, pred) >= 0);
347
348 const edge_descriptor pred_rev = get(m_rev_edge_map, pred);
349 put(m_res_cap_map, pred_rev, get(m_res_cap_map, pred_rev) + bottleneck);
350
351 if(new_pred_cap == 0){
352 set_no_parent(current_node);
353 m_orphans.push_front(current_node);
354 }
355 current_node = target(pred, m_g);
356 }
357 //and add it to the max-flow
358 m_flow += bottleneck;
359 }
property_traits< EdgeCapacityMap >::value_type tEdgeVal

References boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::find_bottleneck(), get(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_edge_to_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_tree(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_flow, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_g, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_orphans, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_res_cap_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_rev_edge_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_sink, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_source, put(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_no_parent(), source(), and target().

◆ augment_direct_paths()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
void boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::augment_direct_paths ( )
inlineprotected

Definition at line 136 of file patched_boykov_kolmogorov_max_flow.hpp.

136 {
137 // in a first step, we augment all direct paths from source->NODE->sink
138 // and additionally paths from source->sink. This improves especially
139 // graphcuts for segmentation, as most of the nodes have source/sink
140 // connects but shouldn't have an impact on other maxflow problems
141 // (this is done in grow() anyway)
142 out_edge_iterator ei, e_end;
143 for(boost::tie(ei, e_end) = out_edges(m_source, m_g); ei != e_end; ++ei){
144 edge_descriptor from_source = *ei;
145 vertex_descriptor current_node = target(from_source, m_g);
146 if(current_node == m_sink){
147 tEdgeVal cap = get(m_res_cap_map, from_source);
148 put(m_res_cap_map, from_source, 0);
149 m_flow += cap;
150 continue;
151 }
152 edge_descriptor to_sink;
153 bool is_there;
154 boost::tie(to_sink, is_there) = lookup_edge(current_node, m_sink, m_g);
155 if(is_there){
156 tEdgeVal cap_from_source = get(m_res_cap_map, from_source);
157 tEdgeVal cap_to_sink = get(m_res_cap_map, to_sink);
158 if(cap_from_source > cap_to_sink){
159 set_tree(current_node, tColorTraits::black());
160 add_active_node(current_node);
161 set_edge_to_parent(current_node, from_source);
162 put(m_dist_map, current_node, 1);
163 put(m_time_map, current_node, 1);
164 // add stuff to flow and update residuals. we don't need to
165 // update reverse_edges, as incoming/outgoing edges to/from
166 // source/sink don't count for max-flow
167 put(m_res_cap_map, from_source, get(m_res_cap_map, from_source) - cap_to_sink);
168 put(m_res_cap_map, to_sink, 0);
169 m_flow += cap_to_sink;
170 } else if(cap_to_sink > 0){
171 set_tree(current_node, tColorTraits::white());
172 add_active_node(current_node);
173 set_edge_to_parent(current_node, to_sink);
174 put(m_dist_map, current_node, 1);
175 put(m_time_map, current_node, 1);
176 // add stuff to flow and update residuals. we don't need to update
177 // reverse_edges, as incoming/outgoing edges to/from source/sink
178 // don't count for max-flow
179 put(m_res_cap_map, to_sink, get(m_res_cap_map, to_sink) - cap_from_source);
180 put(m_res_cap_map, from_source, 0);
181 m_flow += cap_from_source;
182 }
183 } else if(get(m_res_cap_map, from_source)){
184 // there is no sink connect, so we can't augment this path, but to
185 // avoid adding m_source to the active nodes, we just activate this
186 // node and set the appropriate things
187 set_tree(current_node, tColorTraits::black());
188 set_edge_to_parent(current_node, from_source);
189 put(m_dist_map, current_node, 1);
190 put(m_time_map, current_node, 1);
191 add_active_node(current_node);
192 }
193 }
194 for(boost::tie(ei, e_end) = out_edges(m_sink, m_g); ei != e_end; ++ei){
195 edge_descriptor to_sink = get(m_rev_edge_map, *ei);
196 vertex_descriptor current_node = source(to_sink, m_g);
197 if(get(m_res_cap_map, to_sink)){
198 set_tree(current_node, tColorTraits::white());
199 set_edge_to_parent(current_node, to_sink);
200 put(m_dist_map, current_node, 1);
201 put(m_time_map, current_node, 1);
202 add_active_node(current_node);
203 }
204 }
205 }

References boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::add_active_node(), get(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_dist_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_flow, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_g, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_res_cap_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_rev_edge_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_sink, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_source, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time_map, out_edges(), put(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_edge_to_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_tree(), source(), and target().

◆ find_bottleneck()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
tEdgeVal boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::find_bottleneck ( edge_descriptor e)
inlineprotected

returns the bottleneck of a s->t path (end_of_path is last vertex in source-tree, begin_of_path is first vertex in sink-tree)

Definition at line 365 of file patched_boykov_kolmogorov_max_flow.hpp.

365 {
366 BOOST_USING_STD_MIN();
367 tEdgeVal minimum_cap = get(m_res_cap_map, e);
368 vertex_descriptor current_node = source(e, m_g);
369 //first go back in the source tree
370 while(current_node != m_source){
371 edge_descriptor pred = get_edge_to_parent(current_node);
372 minimum_cap = min BOOST_PREVENT_MACRO_SUBSTITUTION(minimum_cap, get(m_res_cap_map, pred));
373 current_node = source(pred, m_g);
374 }
375 //then go forward in the sink-tree
376 current_node = target(e, m_g);
377 while(current_node != m_sink){
378 edge_descriptor pred = get_edge_to_parent(current_node);
379 minimum_cap = min BOOST_PREVENT_MACRO_SUBSTITUTION(minimum_cap, get(m_res_cap_map, pred));
380 current_node = target(pred, m_g);
381 }
382 return minimum_cap;
383 }
T min(T a, T b, T c)

References get(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_edge_to_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_g, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_res_cap_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_sink, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_source, source(), and target().

◆ finish_node()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
void boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::finish_node ( vertex_descriptor v)
inlineprotected

◆ get_edge_to_parent()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
edge_descriptor boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_edge_to_parent ( vertex_descriptor v) const
inlineprotected

◆ get_next_active_node()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
vertex_descriptor boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_next_active_node ( )
inlineprotected

return next active vertex if there is one, otherwise a null_vertex

Definition at line 489 of file patched_boykov_kolmogorov_max_flow.hpp.

489 {
490 while(true){
491 if(m_active_nodes.empty())
492 return graph_traits<Graph>::null_vertex();
494
495 //if it has no parent, this node can't be active (if its not source or sink)
496 if(!has_parent(v) && v != m_source && v != m_sink){
497 m_active_nodes.pop();
498 put(m_in_active_list_map, v, false);
499 } else{
500 BOOST_ASSERT(get_tree(v) == tColorTraits::black() || get_tree(v) == tColorTraits::white());
501 return v;
502 }
503 }
504 }

References boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_tree(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::has_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_active_nodes, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_in_active_list_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_sink, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_source, put(), and v.

◆ get_tree()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
tColorValue boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_tree ( vertex_descriptor v) const
inlineprotected

returns the search tree of v; tColorValue::black() for source tree, white() for sink tree, gray() for no tree

Definition at line 546 of file patched_boykov_kolmogorov_max_flow.hpp.

546 {
547 return get(m_tree_map, v);
548 }

References get(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_tree_map, and v.

◆ grow()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
std::pair< edge_descriptor, bool > boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::grow ( )
inlineprotected

Returns a pair of an edge and a boolean. if the bool is true, the edge is a connection of a found path from s->t , read "the link" and source(returnVal, m_g) is the end of the path found in the source-tree target(returnVal, m_g) is the beginning of the path found in the sink-tree

Definition at line 213 of file patched_boykov_kolmogorov_max_flow.hpp.

213 {
214 BOOST_ASSERT(m_orphans.empty());
215 vertex_descriptor current_node;
216 while((current_node = get_next_active_node()) != graph_traits<Graph>::null_vertex()){ //if there is one
217 BOOST_ASSERT(get_tree(current_node) != tColorTraits::gray() &&
218 (has_parent(current_node) ||
219 current_node == m_source ||
220 current_node == m_sink));
221
222 if(get_tree(current_node) == tColorTraits::black()){
223 //source tree growing
224 out_edge_iterator ei, e_end;
225 if(current_node != m_last_grow_vertex){
226 m_last_grow_vertex = current_node;
227 boost::tie(m_last_grow_edge_it, m_last_grow_edge_end) = out_edges(current_node, m_g);
228 }
231 if(get(m_res_cap_map, out_edge) > 0){ //check if we have capacity left on this edge
232 vertex_descriptor other_node = target(out_edge, m_g);
233 if(get_tree(other_node) == tColorTraits::gray()){ //it's a free node
234 set_tree(other_node, tColorTraits::black()); //acquire other node to our search tree
235 set_edge_to_parent(other_node, out_edge); //set us as parent
236 put(m_dist_map, other_node, get(m_dist_map, current_node) + 1); //and update the distance-heuristic
237 put(m_time_map, other_node, get(m_time_map, current_node));
238 add_active_node(other_node);
239 } else if(get_tree(other_node) == tColorTraits::black()) {
240 // we do this to get shorter paths. check if we are nearer to
241 // the source as its parent is
242 if(is_closer_to_terminal(current_node, other_node)){
243 set_edge_to_parent(other_node, out_edge);
244 put(m_dist_map, other_node, get(m_dist_map, current_node) + 1);
245 put(m_time_map, other_node, get(m_time_map, current_node));
246 }
247 } else{
248 BOOST_ASSERT(get_tree(other_node)==tColorTraits::white());
249 //kewl, found a path from one to the other search tree, return
250 // the connecting edge in src->sink dir
251 return std::make_pair(out_edge, true);
252 }
253 }
254 } //for all out-edges
255 } //source-tree-growing
256 else{
257 BOOST_ASSERT(get_tree(current_node) == tColorTraits::white());
258 out_edge_iterator ei, e_end;
259 if(current_node != m_last_grow_vertex){
260 m_last_grow_vertex = current_node;
261 boost::tie(m_last_grow_edge_it, m_last_grow_edge_end) = out_edges(current_node, m_g);
262 }
265 if(get(m_res_cap_map, in_edge) > 0){ //check if there is capacity left
266 vertex_descriptor other_node = source(in_edge, m_g);
267 if(get_tree(other_node) == tColorTraits::gray()){ //it's a free node
268 set_tree(other_node, tColorTraits::white()); //acquire that node to our search tree
269 set_edge_to_parent(other_node, in_edge); //set us as parent
270 add_active_node(other_node); //activate that node
271 put(m_dist_map, other_node, get(m_dist_map, current_node) + 1); //set its distance
272 put(m_time_map, other_node, get(m_time_map, current_node));//and time
273 } else if(get_tree(other_node) == tColorTraits::white()){
274 if(is_closer_to_terminal(current_node, other_node)){
275 //we are closer to the sink than its parent is, so we "adopt" him
276 set_edge_to_parent(other_node, in_edge);
277 put(m_dist_map, other_node, get(m_dist_map, current_node) + 1);
278 put(m_time_map, other_node, get(m_time_map, current_node));
279 }
280 } else{
281 BOOST_ASSERT(get_tree(other_node)==tColorTraits::black());
282 //kewl, found a path from one to the other search tree,
283 // return the connecting edge in src->sink dir
284 return std::make_pair(in_edge, true);
285 }
286 }
287 } //for all out-edges
288 } //sink-tree growing
289
290 //all edges of that node are processed, and no more paths were found.
291 // remove if from the front of the active queue
292 finish_node(current_node);
293 } //while active_nodes not empty
294
295 //no active nodes anymore and no path found, we're done
296 return std::make_pair(edge_descriptor(), false);
297 }
bool is_closer_to_terminal(vertex_descriptor p, vertex_descriptor q)

References boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::add_active_node(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::finish_node(), get(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_next_active_node(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_tree(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::has_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::is_closer_to_terminal(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_dist_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_g, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_last_grow_edge_end, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_last_grow_edge_it, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_last_grow_vertex, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_orphans, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_res_cap_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_rev_edge_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_sink, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_source, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time_map, out_edges(), put(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_edge_to_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_tree(), source(), and target().

◆ has_parent()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
bool boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::has_parent ( vertex_descriptor v) const
inlineprotected

◆ has_sink_connect()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
bool boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::has_sink_connect ( vertex_descriptor v)
inlineprotected

checks if vertex v has a connect to the sink-vertex (m_sink)

Parameters
vthe vertex which is checked
Returns
true if a path to the sink was found, false if not

Definition at line 594 of file patched_boykov_kolmogorov_max_flow.hpp.

594 {
595 tDistanceVal current_distance = 0;
596 vertex_descriptor current_vertex = v;
597 while(true){
598 if(get(m_time_map, current_vertex) == m_time){
599 //we found a node which was already checked this round. use it for distance calculations
600 current_distance += get(m_dist_map, current_vertex);
601 break;
602 }
603 if(current_vertex == m_sink){
605 break;
606 }
607 if(has_parent(current_vertex)){
608 //it has a parent, so get it
609 current_vertex = target(get_edge_to_parent(current_vertex), m_g);
610 ++current_distance;
611 } else{
612 //no path found
613 return false;
614 }
615 }
616 current_vertex=v;
617 while(get(m_time_map, current_vertex) != m_time){
618 put(m_dist_map, current_vertex, current_distance);
619 --current_distance;
620 put(m_time_map, current_vertex, m_time);
621 current_vertex = target(get_edge_to_parent(current_vertex), m_g);
622 }
623 return true;
624 }

References get(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_edge_to_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::has_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_dist_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_g, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_sink, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time_map, put(), target(), and v.

◆ has_source_connect()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
bool boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::has_source_connect ( vertex_descriptor v)
inlineprotected

checks if vertex v has a connect to the source-vertex (m_source)

Parameters
vthe vertex which is checked
Returns
true if a path to the source was found, false if not

Definition at line 631 of file patched_boykov_kolmogorov_max_flow.hpp.

631 {
632 tDistanceVal current_distance = 0;
633 vertex_descriptor current_vertex = v;
634 while(true){
635 if(get(m_time_map, current_vertex) == m_time){
636 //we found a node which was already checked this round. use it for distance calculations
637 current_distance += get(m_dist_map, current_vertex);
638 break;
639 }
640 if(current_vertex == m_source){
642 break;
643 }
644 if(has_parent(current_vertex)){
645 //it has a parent, so get it
646 current_vertex = source(get_edge_to_parent(current_vertex), m_g);
647 ++current_distance;
648 } else{
649 //no path found
650 return false;
651 }
652 }
653 current_vertex=v;
654 while(get(m_time_map, current_vertex) != m_time){
655 put(m_dist_map, current_vertex, current_distance);
656 --current_distance;
657 put(m_time_map, current_vertex, m_time);
658 current_vertex = source(get_edge_to_parent(current_vertex), m_g);
659 }
660 return true;
661 }

References get(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::get_edge_to_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::has_parent(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_dist_map, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_g, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_source, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time, boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time_map, put(), source(), and v.

◆ is_closer_to_terminal()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
bool boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::is_closer_to_terminal ( vertex_descriptor p,
vertex_descriptor q )
inlineprotected

◆ max_flow()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
tEdgeVal boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::max_flow ( )
inline

Definition at line 114 of file patched_boykov_kolmogorov_max_flow.hpp.

114 {
115 //augment direct paths from SOURCE->SINK and SOURCE->VERTEX->SINK
117 //start the main-loop
118 while(true){
119 bool path_found;
120 edge_descriptor connecting_edge;
121 boost::tie(connecting_edge, path_found) = grow(); //find a path from source to sink
122 if(!path_found){
123 //we're finished, no more paths were found
124 break;
125 }
126 ++m_time;
127 augment(connecting_edge); //augment that path
128 adopt(); //rebuild search tree structure
129 }
130 return m_flow;
131 }
std::pair< edge_descriptor, bool > grow()

References boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::adopt(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::augment(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::augment_direct_paths(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::grow(), boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_flow, and boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time.

◆ remove_active_node()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
void boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::remove_active_node ( vertex_descriptor v)
inlineprotected

removes a vertex from the queue of active nodes (actually this does nothing, but checks if this node has no parent edge, as this is the criteria for being no more active)

Definition at line 537 of file patched_boykov_kolmogorov_max_flow.hpp.

537 {
538 (void)v; // disable unused parameter warning
539 BOOST_ASSERT(!has_parent(v));
540 }
typedef void(QOPENGLF_APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer)

References boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::has_parent(), v, and void().

◆ set_edge_to_parent()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
void boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_edge_to_parent ( vertex_descriptor v,
edge_descriptor f_edge_to_parent )
inlineprotected

◆ set_no_parent()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
void boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_no_parent ( vertex_descriptor v)
inlineprotected

removes the edge to parent of v (this is done by invalidating the entry an additional map)

Definition at line 585 of file patched_boykov_kolmogorov_max_flow.hpp.

585 {
586 put(m_has_parent_map, v, false);
587 }

References boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_has_parent_map, put(), and v.

◆ set_tree()

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
void boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::set_tree ( vertex_descriptor v,
tColorValue t )
inlineprotected

sets search tree of v; tColorValue::black() for source tree, white() for sink tree, gray() for no tree

Definition at line 554 of file patched_boykov_kolmogorov_max_flow.hpp.

554 {
555 put(m_tree_map, v, t);
556 }

References boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_tree_map, put(), and v.

Member Data Documentation

◆ m_active_nodes

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
tQueue boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_active_nodes
protected

Definition at line 686 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_cap_map

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
EdgeCapacityMap boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_cap_map
protected

Definition at line 677 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_child_orphans

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
tQueue boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_child_orphans
protected

Definition at line 691 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_dist_map

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
DistanceMap boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_dist_map
protected

Definition at line 682 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_flow

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
tEdgeVal boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_flow
protected

Definition at line 698 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_g

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
Graph& boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_g
protected

Definition at line 675 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_has_parent_map

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
iterator_property_map<std::vector<bool>::iterator, IndexMap> boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_has_parent_map
protected

Definition at line 694 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_has_parent_vec

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
std::vector<bool> boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_has_parent_vec
protected

Definition at line 693 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_in_active_list_map

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
iterator_property_map<std::vector<bool>::iterator, IndexMap> boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_in_active_list_map
protected

Definition at line 688 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_in_active_list_vec

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
std::vector<bool> boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_in_active_list_vec
protected

Definition at line 687 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_index_map

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
IndexMap boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_index_map
protected

Definition at line 676 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_last_grow_edge_end

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
out_edge_iterator boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_last_grow_edge_end
protected

Definition at line 702 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_last_grow_edge_it

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
out_edge_iterator boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_last_grow_edge_it
protected

Definition at line 701 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_last_grow_vertex

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
vertex_descriptor boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_last_grow_vertex
protected

Definition at line 700 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_orphans

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
std::list<vertex_descriptor> boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_orphans
protected

Definition at line 690 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_pre_map

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
PredecessorMap boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_pre_map
protected

Definition at line 680 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_res_cap_map

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
ResidualCapacityEdgeMap boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_res_cap_map
protected

Definition at line 678 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_rev_edge_map

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
ReverseEdgeMap boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_rev_edge_map
protected

Definition at line 679 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_sink

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
vertex_descriptor boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_sink
protected

Definition at line 684 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_source

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
vertex_descriptor boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_source
protected

Definition at line 683 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_time

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
long boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time
protected

Definition at line 699 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_time_map

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
iterator_property_map<std::vector<long>::iterator, IndexMap> boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time_map
protected

Definition at line 697 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_time_vec

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
std::vector<long> boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_time_vec
protected

Definition at line 696 of file patched_boykov_kolmogorov_max_flow.hpp.

◆ m_tree_map

template<class Graph , class EdgeCapacityMap , class ResidualCapacityEdgeMap , class ReverseEdgeMap , class PredecessorMap , class ColorMap , class DistanceMap , class IndexMap >
ColorMap boost::detail::bk_max_flow< Graph, EdgeCapacityMap, ResidualCapacityEdgeMap, ReverseEdgeMap, PredecessorMap, ColorMap, DistanceMap, IndexMap >::m_tree_map
protected

Definition at line 681 of file patched_boykov_kolmogorov_max_flow.hpp.


The documentation for this class was generated from the following file: