diff options
Diffstat (limited to 'src/astar.cpp')
-rw-r--r-- | src/astar.cpp | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/astar.cpp b/src/astar.cpp index b5c424e..e40a436 100644 --- a/src/astar.cpp +++ b/src/astar.cpp @@ -1,20 +1,14 @@ #include "astar.hpp" -Node::Node() : previous_node(NULL), f_score(-1), g_score(0), h_score(-1), visited(false) { - for(unsigned int i = 0; i < NEIGHBOUR_NUM; ++i) - next_nodes[i] = NULL; +Node::Node() : previous_node(NULL), f_score(-1), g_score(0), h_score(-1) { update_f_score(); } -Node::Node(Node *prev_node) : previous_node(prev_node), f_score(-1), g_score(0), h_score(-1), visited(false) { - for(unsigned int i = 0; i < NEIGHBOUR_NUM; ++i) - next_nodes[i] = NULL; +Node::Node(Node *prev_node) : previous_node(prev_node), f_score(-1), g_score(0), h_score(-1) { update_f_score(); } -Node::Node(Node *prev_node, int g) : previous_node(prev_node), f_score(-1), g_score(g), h_score(-1), visited(false) { - for(unsigned int i = 0; i < NEIGHBOUR_NUM; ++i) - next_nodes[i] = NULL; +Node::Node(Node *prev_node, int g) : previous_node(prev_node), f_score(-1), g_score(g), h_score(-1) { update_f_score(); } @@ -22,6 +16,8 @@ Node::~Node() { } bool operator<(const Node& n1, const Node& n2) { + if(n1.f_score == n2.f_score) + return n1.h_score < n2.h_score; return n1.f_score < n2.f_score; } @@ -30,15 +26,17 @@ bool operator==(const Node& n1, const Node& n2) { } bool operator>(const Node& n1, const Node& n2) { - return !(n1 < n2) && !(n1 == n2); + if(n1.f_score == n2.f_score) + return n1.h_score > n2.h_score; + return n1.f_score > n2.f_score; } bool operator<=(const Node& n1, const Node& n2) { - return (n1 < n2) || (n1 == n2); + return n1.f_score <= n2.f_score; } bool operator>=(const Node& n1, const Node& n2) { - return !(n1 < n2); + return n1.f_score >= n2.f_score; } bool operator!=(const Node& n1, const Node& n2) { |