77template <AlephGraph GT, ArcDistance<GT> Distance = Dft_Dist<GT>>
151template <AlephGraph
GT,
177#define ANassert(p) (static_cast<Node_Info*>(NODE_COOKIE(p)))
178#define ATREENODE(p) (static_cast<Tree_Node_Info*>(NODE_COOKIE(p))->tree_node)
179#define AACC(p) (ANassert(p)->dist)
180#define AHEAPNODE(p) (ANassert(p)->heap_node)
181#define APARENT(p) (ANassert(p)->ret_node)
182#define AAassert(p) (static_cast<Arc_Info*>(ARC_COOKIE(p)))
183#define AARC_DIST(p) (Distance()(p))
184#define ATREEARC(p) (static_cast<Tree_Arc_Info*>(ARC_COOKIE(p))->tree_arc)
185#define APOT(p) (AAassert(p)->pot)
211 std::cerr <<
"WARNING: Inadmissible heuristic detected!\n";
212 std::cerr <<
" Heuristic estimate h(" << node <<
") = " <<
h_estimate <<
"\n";
213 std::cerr <<
" Actual remaining cost = " <<
actual_cost <<
"\n";
215 std::cerr <<
" A* may return suboptimal paths.\n";
294 auto arc = it.get_current_arc_ne();
295 auto tgt = it.get_tgt_node();
299 heap.put_arc(arc, tgt);
302 typename GT::Node* result =
nullptr;
343 auto arc = it.get_current_arc_ne();
347 auto tgt = it.get_tgt_node();
354 heap.put_arc(arc, tgt);
400 auto arc = it.get_current_arc_ne();
401 auto tgt = it.get_tgt_node();
405 heap.put_arc(arc, tgt);
442 auto arc = it.get_current_arc_ne();
446 auto t = it.get_tgt_node();
453 heap.put_arc(arc, t);
485 return std::numeric_limits<typename Distance::Distance_Type>::max();
543 auto arc = it.get_current_arc_ne();
545 heap.put_arc(arc, it.get_tgt_node());
582 auto arc = it.get_current_arc_ne();
586 auto tgt = it.get_tgt_node();
591 heap.put_arc(arc, tgt);
642 auto arc = it.get_current_arc_ne();
644 heap.put_arc(arc, it.get_tgt_node());
683 auto arc = it.get_current_arc_ne();
687 auto tgt = it.get_tgt_node();
692 heap.put_arc(arc, tgt);
737 auto arc = it.get_current_arc_ne();
739 heap.put_arc(arc, it.get_tgt_node());
779 auto a = it.get_current_arc_ne();
783 auto t = it.get_tgt_node();
820 auto arc = it.get_current_arc_ne();
822 heap.put_arc(arc, it.get_tgt_node());
856 auto a = it.get_current_arc_ne();
860 auto t = it.get_tgt_node();
894 return std::numeric_limits<typename Distance::Distance_Type>::max();
951template <AlephGraph GT, ArcDistance<GT> Distance = Dft_Dist<GT>>
962 return static_cast<Distance_Type>(std::sqrt(dx * dx + dy * dy));
976template <AlephGraph GT, ArcDistance<GT> Distance = Dft_Dist<GT>>
985 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.
C++20 concepts for the protocol shared by graph algorithms.
Standard functor implementations and comparison objects.
Arc heap for graph algorithms.
List_Graph< Graph_Node< Node_Info >, Graph_Arc< Arc_Info > > GT
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.
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)
#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.
size_t blossom_maximum_cardinality_matching(const GT &g, DynDlist< typename GT::Arc * > &matching, SA sa=SA())
Alias of compute_maximum_cardinality_general_matching().
#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.
and
Check uniqueness with explicit hash + equality functors.
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.