aboutsummaryrefslogtreecommitdiffstats
path: root/src/astar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/astar.cpp')
-rw-r--r--src/astar.cpp22
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) {