61 typename Net::Node * source =
nullptr;
62 long min_degree = numeric_limits<long>::max();
65 auto p = it.get_curr_ne();
67 if (g.get_num_arcs(p) < min_degree)
69 source = mapped_node<GT, Net> (p);
70 min_degree = g.get_num_arcs(p);
79 auto a = it.get_curr_ne();
80 auto src = mapped_node<GT, Net> (g.get_src_node(a));
81 auto tgt = mapped_node<GT, Net> (g.get_tgt_node(a));
83 net.insert_arc(tgt, src, 1);
85 net.insert_arc(src, tgt, 1);
88 long min_k = min_degree;
91 auto sink = it.get_curr_ne();
98 from_sink_arcs.
append(it.get_curr_ne());
101 it(from_sink_arcs); it.
has_curr(); it.next_ne())
102 net.disconnect_arc(it.get_curr_ne());
104 const typename Net::Flow_Type flow = Max_Flow <Net> () (net);
108 while (not from_sink_arcs.
is_empty())
109 net.connect_arc(from_sink_arcs.
get());
149 long operator () (GT & g) {
return edge_connectivity <GT, Max_Flow> (g); }
191 typename Net::Node * source =
nullptr;
192 long min_degree = numeric_limits<long>::max();
195 auto p = it.get_curr_ne();
196 auto q = net.insert_node();
199 if (g.get_num_arcs(p) < min_degree)
201 source = mapped_node<GT, Net> (p);
202 min_degree = g.get_num_arcs(p);
211 auto a = it.get_curr_ne();
212 auto src = mapped_node<GT, Net>(g.get_src_node(a));
213 auto tgt = mapped_node<GT, Net>(g.get_tgt_node(a));
216 auto arc = net.insert_arc(tgt, src, 1);
222 auto arc = net.insert_arc(src, tgt, 1);
229 long min_k = numeric_limits<long>::max();
232 auto sink = it.get_curr_ne();
239 from_sink_arcs.
append(it.get_curr_ne());
242 it(from_sink_arcs); it.
has_curr(); it.next_ne())
243 net.disconnect_arc(it.get_curr_ne());
260 while (not from_sink_arcs.
is_empty())
261 net.connect_arc(from_sink_arcs.
get());
265 it = tmp_vs.
begin(); it != tmp_vs.
end(); it++)
266 l.
insert(mapped_node <Net, GT> (*it));
269 it = tmp_vt.
begin(); it != tmp_vt.
end(); it++)
270 r.
insert(mapped_node <Net, GT> (*it));
275 typename Net::Arc* arc = it.get_curr_ne();
276 cut.
append(mapped_arc<Net, GT> (arc));
322 return compute_min_cut <GT, Max_Flow, SA> (g, l, r, cut);
347 auto p = it.get_curr_ne();
353 auto a = it.get_curr_ne();
354 auto src = mapped_node<GT,Net>(g.get_src_node(a));
355 auto tgt = mapped_node<GT,Net>(g.get_tgt_node(a));
356 net.insert_arc(tgt, src, 1);
357 net.insert_arc(src, tgt, 1);
360 long min_k = g.get_num_nodes();
365 auto source = k.get_curr_ne();
369 auto from_arc = it.get_curr_ne();
371 search_arc<Net>(net, net.get_tgt_node(from_arc), source);
372 assert(to_arc !=
nullptr);
373 assert(net.get_tgt_node(to_arc) == source);
374 to_source_list.
append(to_arc);
379 net.disconnect_arc(it.get_curr_ne());
383 for (j.
next(); j.has_curr(); j.next_ne())
385 auto sink = j.get_curr_ne();
386 if (search_arc <Net> (net, source, sink) !=
nullptr)
392 from_sink_arcs.
append(it.get_curr_ne());
395 it(from_sink_arcs); it.
has_curr(); it.next_ne())
396 net.disconnect_arc(it.get_curr_ne());
403 auto p = it.get_curr_ne();
404 if (p == source or p == sink)
410 auto ps = aux_net.insert_node(p->get_info());
411 auto pt = aux_net.insert_node(p->get_info());
412 map.
insert(p, aux_net.insert_arc(ps, pt, 1));
417 auto a = it.get_curr_ne();
418 auto nsrc = net.get_src_node(a);
419 auto ntgt = net.get_tgt_node(a);
420 typename Net::Node * asrc =
nullptr;
421 typename Net::Node * atgt =
nullptr;
427 auto arc = map.
find(nsrc);
428 asrc = aux_net.get_tgt_node(arc);
435 auto arc = map.
find(ntgt);
436 atgt = aux_net.get_src_node(arc);
438 aux_net.insert_arc(asrc, atgt, 1);
442 const auto flow = Max_Flow <Net> () (aux_net);
447 while (not from_sink_arcs.
is_empty())
448 net.connect_arc(from_sink_arcs.
get());
453 while (not to_source_list.
is_empty())
454 net.connect_arc(to_source_list.
get());
464 # endif // TPL_KGRAPH_H Definition: tpl_graph.H:1225
bool has_curr() const noexcept
Return true if the iterator has current item.
Definition: dlink.H:658
void swap(DynDlist &l) noexcept
Definition: tpl_dynDlist.H:357
Pair * insert(const Key &key, const Type &data)
Definition: tpl_dynMapTree.H:112
#define NODE_COOKIE(p)
Definition: aleph-graph.H:333
Definition: tpl_dynDlist.H:51
Definition: tpl_net.H:216
void swap(set &c)
Definition: Set.H:476
#define ARC_COOKIE(p)
Definition: aleph-graph.H:366
Definition: tpl_dynDlist.H:413
long vertex_connectivity(GT &g)
Definition: tpl_kgraph.H:341
iterator end() const
Retorna un iterador posicionado al último elemento del conjunto.
Definition: Set.H:488
void map_nodes(typename GTS::Node *p, typename GTT::Node *q) noexcept
Definition: tpl_graph.H:3419
std::pair< iterator, bool > insert(const T &value)
Definition: Set.H:511
Definition: tpl_kgraph.H:314
Definition: tpl_graph.H:1063
void next()
Adelanta el iterador una posición.
Definition: filter_iterator.H:169
Definition: tpl_net.H:2065
Definition: tpl_dynMapTree.H:357
Definition: tpl_kgraph.H:135
iterator begin() const
Retorna un iterador posicionado al primer elemento del conjunto.
Definition: Set.H:482
bool is_empty() const noexcept
Return true if this (as header node) is empty.
Definition: dlink.H:192
Definition: tpl_graph.H:1270
long operator()(GT &g)
Definition: tpl_kgraph.H:149
T get()
Definition: tpl_dynDlist.H:306
long edge_connectivity(GT &g)
Definition: tpl_kgraph.H:57
Definition: tpl_net.H:1886
Definition: tpl_graph.H:1177
long compute_min_cut(GT &g, Aleph::set< typename GT::Node *> &l, Aleph::set< typename GT::Node *> &r, DynDlist< typename GT::Arc *> &cut)
Definition: tpl_kgraph.H:184
T & append(const T &item)
Definition: tpl_dynDlist.H:149
Definition: tpl_net.H:1946
Type & find(const Key &key)
Definition: tpl_dynMapTree.H:242