Parasol Planning Library (PPL)
FibonocciHeap.h
Go to the documentation of this file.
1 #ifndef FIBONACCI_HEAP_H_
2 #define FIBONACCI_HEAP_H_
3 
5 
6 template<typename State, typename Action>
7 class FibonacciHeap {
8  public:
9 
11 
13  struct FibonacciNode {
14  int degree; //Number of children for this node.
15  FibonacciNode *parent; //Parent pointer.
16  FibonacciNode *child; //Pointer to the first child of a node.
17  FibonacciNode *left; //Pointer to the left sibling.
18  FibonacciNode *right; //Pointer to the right sibling.
19  bool mark; //Whether the node is marked. Used for cascading cut operation.
21  double key; // This corresponds to the distance from the source node.
22  size_t m_VID; //Pointer to the node. Simplifying, we use an int-index to represent each node.
23  };
24 
25  Fibonacci(StateGraph* _stateGraph){
26  m_stateGraph = _stateGraph;
27  }
28 
29  void fib_heap_insert(FibonacciNode *new_node, double key);
30 
31  void fib_heap_existing_to_root(FibonacciNode *new_node);
32 
33  void fib_heap_add_child(FibonacciNode *parent_node, FibonacciNode *new_child_node);
34 
35  void fib_heap_remove_node_from_root(FibonacciNode *node);
36 
37  void fib_heap_link(FibonacciNode *high_node, FibonacciNode *low_node);
38 
39  void fib_heap_consolidate();
40 
41  FibonacciNode* fib_heap_extract_min();
42 
43  void fib_heap_cut(FibonacciNode *node,
44  FibonacciNode *node_parent);
45 
46  void fib_heap_cascading_cut(FibonacciNode *node);
47 
48  void fib_heap_decrease_key(FibonacciNode *node_inst,
49  int new_key);
50 
51  void fib_heap_delete(FibonacciNode *node);
52 
53  int get_min_distant_unmarked_node(int *distance_to_dest,
54  std::unordered_map<size_t,bool> marked);
55 
56  int get_min_distant_unmarked_node_fib_heap(std::unordered_map<size_t,FibonacciNode*> node_array,
57  std::unordered_map<size_t,bool> marked);
58 
59  void dijkstra_fibanocci(int src);
60 
62  //void run_DFS(int node_index, std::unordered_map<size_t,bool>& discovered);
63 
64  bool check_connected(graph *my_graph);
65 
66 
67 
68  private:
69  FibonacciNode* m_minNode{nullptr};
70  size_t m_numNodes{0};
71  StateGraph* m_roadmap{nullptr};
72  StateGraph* m_highLevelGraph{nullptr};
73 };
Definition: FibonocciHeap.h:7
int get_min_distant_unmarked_node_fib_heap(std::unordered_map< size_t, FibonacciNode * > node_array, std::unordered_map< size_t, bool > marked)
Definition: FibonocciHeap.cpp:630
int get_min_distant_unmarked_node(int *distance_to_dest, std::unordered_map< size_t, bool > marked)
Definition: FibonocciHeap.cpp:557
FibonacciNode * fib_heap_extract_min()
Definition: FibonocciHeap.cpp:328
void fib_heap_decrease_key(FibonacciNode *node_inst, int new_key)
Definition: FibonocciHeap.cpp:409
void fib_heap_cut(FibonacciNode *node, FibonacciNode *node_parent)
Definition: FibonocciHeap.cpp:374
void fib_heap_insert(FibonacciNode *new_node, double key)
Definition: FibonocciHeap.cpp:91
void dijkstra_fibanocci(int src)
Definition: FibonocciHeap.cpp:509
void fib_heap_cascading_cut(FibonacciNode *node)
Definition: FibonocciHeap.cpp:388
void fib_heap_add_child(FibonacciNode *parent_node, FibonacciNode *new_child_node)
Definition: FibonocciHeap.cpp:187
void fib_heap_link(FibonacciNode *high_node, FibonacciNode *low_node)
Definition: FibonocciHeap.cpp:239
void fib_heap_consolidate()
Definition: FibonocciHeap.cpp:257
void fib_heap_remove_node_from_root(FibonacciNode *node)
Definition: FibonocciHeap.cpp:210
Fibonacci(StateGraph *_stateGraph)
Definition: FibonocciHeap.h:25
GenericStateGraph< State, Action > StateGraph
Definition: FibonocciHeap.h:10
void fib_heap_delete(FibonacciNode *node)
Definition: FibonocciHeap.cpp:443
bool check_connected(graph *my_graph)
Definition: FibonocciHeap.cpp:706
void fib_heap_existing_to_root(FibonacciNode *new_node)
Definition: FibonocciHeap.cpp:123
Definition: GenericStateGraph.h:67
Definition: FibonocciHeap.h:13
FibonacciNode * right
Definition: FibonocciHeap.h:18
bool is_infinity
Definition: FibonocciHeap.h:20
double key
Definition: FibonocciHeap.h:21
int degree
Definition: FibonocciHeap.h:14
bool mark
Definition: FibonocciHeap.h:19
size_t m_VID
Definition: FibonocciHeap.h:22
FibonacciNode * child
Definition: FibonocciHeap.h:16
FibonacciNode * left
Definition: FibonocciHeap.h:17
FibonacciNode * parent
Definition: FibonocciHeap.h:15