75template <
class GT,
class Distance = Dft_Dist<GT>>
175#define ANassert(p) (static_cast<Node_Info*>(NODE_COOKIE(p)))
176#define ATREENODE(p) (static_cast<Tree_Node_Info*>(NODE_COOKIE(p))->tree_node)
177#define AACC(p) (ANassert(p)->dist)
178#define AHEAPNODE(p) (ANassert(p)->heap_node)
179#define APARENT(p) (ANassert(p)->ret_node)
180#define AAassert(p) (static_cast<Arc_Info*>(ARC_COOKIE(p)))
181#define AARC_DIST(p) (Distance()(p))
182#define ATREEARC(p) (static_cast<Tree_Arc_Info*>(ARC_COOKIE(p))->tree_arc)
183#define APOT(p) (AAassert(p)->pot)
209 std::cerr <<
"WARNING: Inadmissible heuristic detected!\n";
210 std::cerr <<
" Heuristic estimate h(" << node <<
") = " <<
h_estimate <<
"\n";
211 std::cerr <<
" Actual remaining cost = " <<
actual_cost <<
"\n";
213 std::cerr <<
" A* may return suboptimal paths.\n";
292 auto arc = it.get_current_arc_ne();
293 auto tgt = it.get_tgt_node();
297 heap.put_arc(arc, tgt);
300 typename GT::Node* result =
nullptr;
341 auto arc = it.get_current_arc_ne();
345 auto tgt = it.get_tgt_node();
352 heap.put_arc(arc, tgt);
398 auto arc = it.get_current_arc_ne();
399 auto tgt = it.get_tgt_node();
403 heap.put_arc(arc, tgt);
440 auto arc = it.get_current_arc_ne();
444 auto t = it.get_tgt_node();
451 heap.put_arc(arc, t);
483 return std::numeric_limits<typename Distance::Distance_Type>::max();
541 auto arc = it.get_current_arc_ne();
543 heap.put_arc(arc, it.get_tgt_node());
580 auto arc = it.get_current_arc_ne();
584 auto tgt = it.get_tgt_node();
589 heap.put_arc(arc, tgt);
640 auto arc = it.get_current_arc_ne();
642 heap.put_arc(arc, it.get_tgt_node());
681 auto arc = it.get_current_arc_ne();
685 auto tgt = it.get_tgt_node();
690 heap.put_arc(arc, tgt);
735 auto arc = it.get_current_arc_ne();
737 heap.put_arc(arc, it.get_tgt_node());
777 auto a = it.get_current_arc_ne();
781 auto t = it.get_tgt_node();
818 auto arc = it.get_current_arc_ne();
820 heap.put_arc(arc, it.get_tgt_node());
854 auto a = it.get_current_arc_ne();
858 auto t = it.get_tgt_node();
892 return std::numeric_limits<typename Distance::Distance_Type>::max();
949template <
class GT,
class Distance = Dft_Dist<GT>>
956 auto& f =
from->get_info();
957 auto& t =
to->get_info();
974template <
class GT,
class Distance = Dft_Dist<GT>>
981 auto& f =
from->get_info();
982 auto& t =
to->get_info();
983 return static_cast<Distance_Type>(std::abs(f.x - t.x) + std::abs(f.y - t.y));
Exception handling system with formatted messages for Aleph-w.
#define ah_domain_error_if(C)
Throws std::domain_error if condition holds.
Standard functor implementations and comparison objects.
Arc heap for graph algorithms.
A* algorithm for finding the shortest path between two nodes.
Distance::Distance_Type get_min_path(typename GT::Node *end, Path< GT > &path)
Extracts a shortest path to end from a previously painted graph.
Distance::Distance_Type find_min_path(const GT &g, typename GT::Node *start, typename GT::Node *end, Path< GT > &min_path)
Computes shortest path by painting the graph (without heuristic).
GT::Node * compute_min_paths_tree(const GT &g, typename GT::Node *start, GT &tree)
Computes the spanning tree of ALL shortest paths from the start node.
GT::Node * compute_path(const GT &g, typename GT::Node *start, typename GT::Node *end, GT &tree)
Alias for compute_partial_path (backward compatibility).
void check_heuristic_admissibility(typename GT::Node *node, typename GT::Node *goal, const typename Distance::Distance_Type &actual_cost)
void compute_partial_min_paths_tree(const GT &g, typename GT::Node *start, typename GT::Node *end, GT &tree)
Computes the partial spanning tree from start to end (without a heuristic).
AStar_Min_Path(Distance dist=Distance(), Heuristic __heuristic=Heuristic(), SA __sa=SA())
Constructor.
Distance::Distance_Type operator()(const GT &g, typename GT::Node *s, typename GT::Node *e, Path< GT > &path)
Finds shortest path using A* heuristic.
GT::Node * compute_partial_path(const GT &g, typename GT::Node *start, typename GT::Node *end, GT &tree)
Computes the shortest path from start to end using A*.
bool paint_partial_min_paths_tree(const GT &g, typename GT::Node *start, typename GT::Node *end)
Paints on graph g the partial shortest paths tree (without heuristic).
bool paint_partial_path(const GT &g, typename GT::Node *start, typename GT::Node *end)
Paints the shortest path from start to end on the graph using A*.
bool paint_path(const GT &g, typename GT::Node *start, typename GT::Node *end)
Alias for paint_partial_path (backward compatibility).
bool painted
Whether graph has been painted.
Distance::Distance_Type find_path(const GT &g, typename GT::Node *start, typename GT::Node *end, Path< GT > &path)
Finds the shortest path from start to end using A*.
void paint_min_paths_tree(const GT &g, typename GT::Node *start)
Paints on graph g the spanning tree of ALL shortest paths starting from start (without heuristic).
void operator()(const GT &g, typename GT::Node *s, GT &tree)
Computes the spanning tree of all shortest paths.
Default distance accessor for arc weights.
void empty() noexcept
empty the list
constexpr bool is_empty() const noexcept
Return true if list is empty.
virtual Node * insert_node(Node *node) noexcept
Insertion of a node already allocated.
Arc * insert_arc(Node *src_node, Node *tgt_node, void *a)
void empty()
Clean the path: all the nodes and arc are removed.
Base class providing common infrastructure for shortest path algorithms.
Distance::Distance_Type get_min_path(typename GT::Node *end, Path< GT > &path)
Extracts a shortest path to end from a previously painted graph.
Distance::Distance_Type copy_painted_min_paths_tree(GT &g, GT &tree)
Extracts the painted shortest paths tree and puts it in tree.
bool is_painted() const noexcept
Check if the graph has been painted.
bool has_computation() const noexcept
Check if a computation has been performed.
Distance::Distance_Type checked_add(const typename Distance::Distance_Type &a, const typename Distance::Distance_Type &b) const
Checked addition to prevent integer overflow.
GT * get_graph() const noexcept
Get the graph of the last computation.
Distance::Distance_Type get_distance(typename GT::Node *node)
Gets the accumulated distance to a node after painting.
GT::Node * get_start_node() const noexcept
Get the start node of the last computation.
GT * ptr_g
Pointer to the graph.
bool painted
Whether graph has been painted.
NodeInfo & get_info() noexcept
Return a modifiable reference to the data contained in the node.
Node * get_src_node(Arc *arc) const noexcept
Return the source node of arc (only for directed graphs)
constexpr size_t get_num_nodes() const noexcept
Return the total of nodes of graph.
Node * get_tgt_node(Arc *arc) const noexcept
Return the target node of arc (only for directed graphs)
List_Graph< Graph_Node< int >, Graph_Arc< int > > GT
#define IS_NODE_VISITED(p, bit)
Determine whether the control bit is set or not to one.
#define ARC_BITS(p)
Return the control bits of arc p.
#define NODE_COOKIE(p)
Return the node cookie
void clear_graph(GT &g) noexcept
Clean a graph: all its nodes and arcs are removed and freed.
#define IS_ARC_VISITED(p, bit)
Determine whether the bit field is or not set to one.
#define NODE_BITS(p)
Get the control bits of a node.
Main namespace for Aleph-w library functions.
DynList< T > maps(const C &c, Op op)
Classic map operation.
Common utilities and base class for shortest path algorithms.
Default filter for filtered iterators on arcs.
Euclidean distance heuristic for A* in 2D grids.
Distance_Type operator()(typename GT::Node *from, typename GT::Node *to) const
typename Distance::Distance_Type Distance_Type
Manhattan distance heuristic for A* in grid graphs.
Distance_Type operator()(typename GT::Node *from, typename GT::Node *to) const
typename Distance::Distance_Type Distance_Type
Filtered iterator of adjacent arcs of a node.
Information stored in arc cookies for painting version.
Arc cleanup for painting version.
Node cleanup for painting version.
Arc cleanup and mapping for tree-building version.
Node cleanup and mapping for tree-building version.
Arc initialization for painting version.
Node initialization for painting version.
Arc initialization for tree-building version.
Node initialization for tree-building version.
Information stored in node cookies for painting version.
Extended arc info with tree arc mapping.
Extended node info with tree node mapping.
Default heuristic for A* (zero heuristic, degrades to Dijkstra).
Distance_Type operator()(typename GT::Node *, typename GT::Node *) const
typename Distance::Distance_Type Distance_Type
Array-based graph implementation.
Path finding algorithms in graphs.