30 # include <tpl_binHeap.H> 31 # include <tpl_graph_utils.H> 35 class Access_Heap_Node>
37 :
public BinHeap<typename GT::Arc*, Distance_Compare<GT, Distance>>
40 Access_Heap_Node & access_node;
45 Distance & get_distance() {
return dist; }
47 ArcHeap(Distance __dist = Distance(),
48 Access_Heap_Node && acc = Access_Heap_Node())
49 : dist(__dist), access_node(acc), dist_cmp(dist)
57 typedef typename Heap::Node
Node;
59 void put_arc(
typename GT::Arc * arc,
typename GT::Node * tgt)
61 Node *& heap_node = access_node(tgt);
63 if (heap_node ==
nullptr)
65 assert(heap_node ==
nullptr);
68 heap_node->get_key() = arc;
75 typename GT::Arc *& arc_in_heap = heap_node->get_key();
78 if (dist_cmp(arc_in_heap, arc))
86 typename GT::Arc * get_min_arc()
88 Node * heap_node = this->
getMin();
89 typename GT::Arc * arc = heap_node->get_key();
92 typename GT::Node * p = (
typename GT::Node*) arc->src_node;
93 if (access_node(p) != heap_node)
94 p = (
typename GT::Node*) arc->tgt_node;
96 assert(access_node(p) == heap_node);
98 access_node(p) =
nullptr;
Node * insert(Node *p) noexcept
Definition: tpl_binHeap.H:587
Definition: tpl_graph_utils.H:1618
void update(Node *p) noexcept
Definition: tpl_binHeap.H:686
Node * getMin()
Definition: tpl_binHeap.H:663
Definition: tpl_binHeap.H:940
BinHeapNode< Key > Node
El tipo de nodo del heap.
Definition: tpl_binHeap.H:943
void remove_all_and_delete() noexcept
Definition: tpl_binHeap.H:730