35 else est =
goal.
x - x;
38 else est +=
goal.
y - y;
46 priority_queue <mapsquare *, vector<mapsquare *>, compare_squarecost> sorted_nodes;
48 vector <mapsquare *> opened_nodes;
50 vector <mapsquare *> closed_nodes;
52 moves_to_goal.clear ();
59 n->
h = goal_estimate (n->
x (), n->
y ());
63 sorted_nodes.push (n);
64 opened_nodes.push_back (n);
65 while (!sorted_nodes.empty ())
67 n = sorted_nodes.top ();
69 opened_nodes.erase (find (opened_nodes.begin (), opened_nodes.end (), n));
113 bool in_opened, in_closed;
114 in_opened = (find (opened_nodes.begin (), opened_nodes.end (), np) != opened_nodes.end ());
115 in_closed = (find (closed_nodes.begin (), closed_nodes.end (), np) != closed_nodes.end ());
118 if (!((in_opened || in_closed) && np->
g <= newg))
122 np->
h = goal_estimate (np->
x (), np->
y ());
123 np->
f = np->
g + np->
h;
128 closed_nodes.erase (find (closed_nodes.begin (), closed_nodes.end (), np));
133 sorted_nodes.push (np);
134 opened_nodes.push_back (np);
152 bool in_opened, in_closed;
153 in_opened = (find (opened_nodes.begin (), opened_nodes.end (), np) != opened_nodes.end ());
154 in_closed = (find (closed_nodes.begin (), closed_nodes.end (), np) != closed_nodes.end ());
157 if (!((in_opened || in_closed) && np->
g <= newg))
161 np->
h = goal_estimate (np->
x (), np->
y ());
162 np->
f = np->
g + np->
h;
167 closed_nodes.erase (find (closed_nodes.begin (), closed_nodes.end (), np));
172 sorted_nodes.push (np);
173 opened_nodes.push_back (np);
191 bool in_opened, in_closed;
192 in_opened = (find (opened_nodes.begin (), opened_nodes.end (), np) != opened_nodes.end ());
193 in_closed = (find (closed_nodes.begin (), closed_nodes.end (), np) != closed_nodes.end ());
196 if (!((in_opened || in_closed) && np->
g <= newg))
200 np->
h = goal_estimate (np->
x (), np->
y ());
201 np->
f = np->
g + np->
h;
206 closed_nodes.erase (find (closed_nodes.begin (), closed_nodes.end (), np));
211 sorted_nodes.push (np);
212 opened_nodes.push_back (np);
229 bool in_opened, in_closed;
230 in_opened = (find (opened_nodes.begin (), opened_nodes.end (), np) != opened_nodes.end ());
231 in_closed = (find (closed_nodes.begin (), closed_nodes.end (), np) != closed_nodes.end ());
234 if (!((in_opened || in_closed) && np->
g <= newg))
238 np->
h = goal_estimate (np->
x (), np->
y ());
239 np->
f = np->
g + np->
h;
244 closed_nodes.erase (find (closed_nodes.begin (), closed_nodes.end (), np));
249 sorted_nodes.push (np);
250 opened_nodes.push_back (np);
256 closed_nodes.push_back (n);
276 for (
u_int16 i = 0; i < nb_moves; i++)
280 moves_to_goal.push_back (t);