119#define DNassert(p) (static_cast<Node_Info*>(NODE_COOKIE(p)))
120#define TREENODE(p) (static_cast<Tree_Node_Info*>(NODE_COOKIE(p))->tree_node)
121#define ACC(p) (DNassert(p)->dist)
122#define HEAPNODE(p) (DNassert(p)->heap_node)
123#define PARENT(p) (DNassert(p)->ret_node)
124#define DAassert(p) (static_cast<Arc_Info*>(ARC_COOKIE(p)))
125#define ARC_DIST(p) (Distance()(p))
126#define TREEARC(p) (static_cast<Tree_Arc_Info*>(ARC_COOKIE(p))->tree_arc)
127#define POT(p) (DAassert(p)->pot)
186 auto arc = it.get_current_arc_ne();
188 heap.put_arc(arc, it.get_tgt_node());
225 auto arc = it.get_current_arc_ne();
229 auto tgt = it.get_tgt_node();
234 heap.put_arc(arc, tgt);
273 auto arc = it.get_current_arc_ne();
275 heap.put_arc(arc, it.get_tgt_node());
313 auto arc = it.get_current_arc_ne();
317 auto tgt = it.get_tgt_node();
322 heap.put_arc(arc, tgt);
355 auto arc = it.get_current_arc_ne();
357 heap.put_arc(arc, it.get_tgt_node());
393 const auto&
acc =
ACC(tgt);
397 auto a = it.get_current_arc_ne();
401 auto t = it.get_tgt_node();
436 auto arc = it.get_current_arc_ne();
438 heap.put_arc(arc, it.get_tgt_node());
468 const auto&
acc =
ACC(tgt);
472 auto a = it.get_current_arc_ne();
476 auto t = it.get_tgt_node();
510 return std::numeric_limits<typename Distance::Distance_Type>::max();
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.
Default distance accessor for arc weights.
Spanning tree calculation of all shortest paths from a given node according to Dijkstra's algorithm.
void operator()(const GT &g, typename GT::Node *s, GT &tree)
Computes the spanning tree of all shortest paths from a given node according to Dijkstra's algorithm.
Distance::Distance_Type get_min_path(typename GT::Node *end, Path< GT > &path)
Extracts a shortest path to end from a previously painted graph.
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.
Distance::Distance_Type operator()(const GT &g, typename GT::Node *s, typename GT::Node *e, Path< GT > &path)
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.
bool painted
Whether graph has been painted.
Distance::Distance_Type find_min_path(const GT &g, typename GT::Node *start, typename GT::Node *end, Path< GT > &min_path)
Computes the shortest path between start and end by painting the graph.
void compute_partial_min_paths_tree(const GT &g, typename GT::Node *start, typename GT::Node *end, GT &tree)
Computes the partial spanning tree of all shortest paths from start that contains the path from start...
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 starting from start and stopping when the end node ...
Dijkstra_Min_Paths(Distance dist=Distance(), SA __sa=SA())
Constructor.
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)
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.
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.
Array-based graph implementation.
Path finding algorithms in graphs.