Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
Aleph::Tarjan_Connected_Components< GT, Itor, SA > Class Template Reference

Computes strongly connected components (SCCs) in a directed graph using Tarjan's algorithm. More...

#include <Tarjan.H>

Collaboration diagram for Aleph::Tarjan_Connected_Components< GT, Itor, SA >:
[legend]

Classes

struct  Init_Tarjan_Node
 Functor to initialize node metadata for Tarjan traversal. More...
 

Public Member Functions

 Tarjan_Connected_Components (const Tarjan_Connected_Components &)=delete
 Tarjan instances should not be copied (they hold internal traversal state)
 
Tarjan_Connected_Componentsoperator= (const Tarjan_Connected_Components &)=delete
 
 Tarjan_Connected_Components (Tarjan_Connected_Components &&)=default
 Move is allowed.
 
Tarjan_Connected_Componentsoperator= (Tarjan_Connected_Components &&)=default
 
 Tarjan_Connected_Components (SA __sa=SA()) noexcept
 Constructs a Tarjan algorithm instance for computing strongly connected components.
 
void connected_components (const GT &g, DynList< GT > &blk_list, DynList< typename GT::Arc * > &arc_list)
 Computes the strongly connected components of a digraph.
 
void connected_components (const GT &g, DynList< DynList< typename GT::Node * > > &blks)
 Computes the strongly connected components of a digraph.
 
DynList< DynList< typename GT::Node * > > connected_components (const GT &g)
 
size_t num_connected_components (const GT &g)
 Returns the number of strongly connected components in the graph.
 
void connected_components (const GT &g, DynList< size_t > &blks)
 Computes the strongly connected components of a digraph.
 
void operator() (const GT &g, DynList< GT > &blk_list, DynList< typename GT::Arc * > &arc_list)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Compute strongly connected components and return them as mapped subgraphs with bridges (arcs connecting different SCCs).
 
void operator() (const GT &g, DynList< DynList< typename GT::Node * > > &blks)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Compute strongly connected components and return them as lists of nodes.
 
DynList< DynList< typename GT::Node * > > operator() (const GT &g)
 
void operator() (const GT &g, DynDlist< GT > &blk_list, DynDlist< typename GT::Arc * > &arc_list)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Compute strongly connected components and return them as mapped subgraphs with bridges, using DynDlist containers.
 
void operator() (const GT &g, DynDlist< DynDlist< typename GT::Node * > > &blks)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Compute strongly connected components and return them as lists of nodes, using DynDlist containers.
 
bool has_cycle (const GT &g)
 Determines whether the digraph contains at least one cycle.
 
bool is_dag (const GT &g)
 Determines whether the directed graph is acyclic (a DAG).
 
bool compute_cycle (const GT &g, Path< GT > &path)
 Finds and constructs a cycle in the digraph, if one exists.
 
bool compute_cycle (const GT &g, typename GT::Node *src, Path< GT > &path)
 Finds and constructs a cycle starting from a specific node, if one exists.
 
bool test_connectivity (const GT &g)
 Tests whether the digraph is strongly connected.
 
Accessors
SAget_filter () noexcept
 Returns the arc filter used by this instance.
 
const SAget_filter () const noexcept
 Returns the arc filter used by this instance (const version).
 
bool has_computation () const noexcept
 Check if a computation has been performed.
 
GTget_graph () const noexcept
 Get the graph of the last computation.
 

Private Member Functions

bool is_node_in_stack (typename GT::Node *p) const noexcept
 Check if a node is currently on the traversal stack.
 
void init_node_and_push_in_stack (typename GT::Node *p)
 Initialize a node and push it onto the traversal stack.
 
GT::Nodepop_from_stack ()
 Pop a node from the traversal stack.
 
void scc_by_blocks (typename GT::Node *v, DynList< GT > &blk_list)
 Recursive DFS to find SCCs and build mapped subgraphs.
 
void scc_by_lists (typename GT::Node *v, DynList< DynList< typename GT::Node * > > &blks)
 Recursive DFS to find SCCs and collect nodes into lists.
 
void scc_by_len (typename GT::Node *v, DynList< size_t > &sizes)
 Recursive DFS to find SCCs and count their sizes.
 
void init_tarjan (const GT &g)
 Initialize internal state for a Tarjan traversal.
 
bool has_cycle (typename GT::Node *v)
 Recursive DFS to detect if a cycle exists starting from v.
 
void build_path (const GT &block, DynMapAvlTree< typename GT::Node *, typename GT::Node * > &table)
 Build a cycle path from a strongly connected block.
 
bool build_cycle (typename GT::Node *v)
 Recursive DFS to find and construct a cycle starting from v.
 
bool is_connected (typename GT::Node *v)
 Recursive DFS to test if the graph is strongly connected.
 

Private Attributes

SA sa
 
GTg_ptr = nullptr
 
DynListStack< typename GT::Node * > stack
 
long df_count = 0
 
size_t n = 0
 
Path< GT > * path_ptr = nullptr
 

Detailed Description

template<class GT, template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
class Aleph::Tarjan_Connected_Components< GT, Itor, SA >

Computes strongly connected components (SCCs) in a directed graph using Tarjan's algorithm.

This class implements Tarjan's algorithm for finding strongly connected components in directed graphs. A strongly connected component is a maximal set of vertices where every vertex is reachable from every other vertex in the component.

Tarjan's algorithm performs a single depth-first traversal to identify all SCCs in O(V + E) time complexity, where V is the number of vertices and E is the number of edges.

Template Parameters
GTThe directed graph type (based on List_Graph or similar).
ItorThe iterator template for traversing adjacent nodes/arcs. Defaults to Out_Iterator for outgoing arcs.
SAThe arc filter class used by the internal iterator. Defaults to Dft_Show_Arc<GT> which shows all arcs.

The class provides multiple overloaded methods for computing SCCs in different output formats:

  • As a list of subgraphs (mapped copies of original graph components)
  • As a list of node lists (lightweight, no graph copying)
  • As a list of component sizes (counts only)

Additional functionality:

Usage example:

// ... build graph ...
// Get SCCs as node lists
auto sccs = tarjan.connected_components(g);
for (auto & scc : sccs)
{
// Process each SCC
for (auto node : scc)
process(node);
}
// Check for cycles
if (tarjan.has_cycle(g))
std::cout << "Graph contains a cycle" << '\n';
Generic directed graph (digraph) wrapper template.
Definition graph-dry.H:3848
Computes strongly connected components (SCCs) in a directed graph using Tarjan's algorithm.
Definition Tarjan.H:171
DynList< T > maps(const C &c, Op op)
Classic map operation.
Note
The algorithm uses node bits (Aleph::Min, Aleph::Depth_First) and node counters/cookies for bookkeeping during traversal.
Warning
This class is NOT thread-safe. Concurrent access to the same instance or to the same graph from multiple threads will result in undefined behavior.
See also
Compute_Cycle_In_Digraph
Author
Leandro Rabindranath León (lrleon at ula dot ve)

Definition at line 170 of file Tarjan.H.

Constructor & Destructor Documentation

◆ Tarjan_Connected_Components() [1/3]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
Aleph::Tarjan_Connected_Components< GT, Itor, SA >::Tarjan_Connected_Components ( const Tarjan_Connected_Components< GT, Itor, SA > &  )
delete

Tarjan instances should not be copied (they hold internal traversal state)

◆ Tarjan_Connected_Components() [2/3]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
Aleph::Tarjan_Connected_Components< GT, Itor, SA >::Tarjan_Connected_Components ( Tarjan_Connected_Components< GT, Itor, SA > &&  )
default

Move is allowed.

◆ Tarjan_Connected_Components() [3/3]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
Aleph::Tarjan_Connected_Components< GT, Itor, SA >::Tarjan_Connected_Components ( SA  __sa = SA())
inlinenoexcept

Constructs a Tarjan algorithm instance for computing strongly connected components.

Parameters
[in]__saArc filter functor used by the internal iterator. Defaults to Dft_Show_Arc<GT> which shows all arcs.

Definition at line 199 of file Tarjan.H.

Member Function Documentation

◆ build_cycle()

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
bool Aleph::Tarjan_Connected_Components< GT, Itor, SA >::build_cycle ( typename GT::Node v)
inlineprivate

◆ build_path()

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
void Aleph::Tarjan_Connected_Components< GT, Itor, SA >::build_path ( const GT block,
DynMapAvlTree< typename GT::Node *, typename GT::Node * > &  table 
)
inlineprivate

Build a cycle path from a strongly connected block.

Takes a mapped strongly connected subgraph and constructs the cycle path in path_ptr using the node mapping table.

Parameters
blockThe strongly connected subgraph (mapped from original).
tableBidirectional mapping between original and block nodes.

Definition at line 453 of file Tarjan.H.

References Aleph::DynMapTree< Key, Data, Tree, Compare >::find(), Aleph::List_Graph< _Graph_Node, _Graph_Arc >::get_first_arc(), GraphCommon< GT, Node, Arc >::get_src_node(), GraphCommon< GT, Node, Arc >::get_tgt_node(), Aleph::Dlink::Iterator::has_curr(), Aleph::HTList::is_empty(), Aleph::maps(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::path_ptr, and Aleph::Tarjan_Connected_Components< GT, Itor, SA >::sa.

Referenced by Aleph::Tarjan_Connected_Components< GT, Itor, SA >::build_cycle().

◆ compute_cycle() [1/2]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
bool Aleph::Tarjan_Connected_Components< GT, Itor, SA >::compute_cycle ( const GT g,
Path< GT > &  path 
)
inline

Finds and constructs a cycle in the digraph, if one exists.

Uses Tarjan's algorithm to detect a cycle in the directed graph. If a cycle is found, it is stored in the provided path parameter.

Parameters
[in]gThe directed graph to search for cycles.
[out]pathA Path object where the cycle will be stored if found. The path will form a cycle (start node == end node). If no cycle exists, path is emptied.
Returns
true if a cycle was found and stored in path, false otherwise.
Exceptions
bad_allocif there is not enough memory.
See also
has_cycle(), is_dag()

Definition at line 897 of file Tarjan.H.

References Aleph::Tarjan_Connected_Components< GT, Itor, SA >::build_cycle(), Aleph::Depth_First, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::df_count, Aleph::Path< GT >::empty(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::init_tarjan(), IS_NODE_VISITED, Aleph::maps(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::n, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::path_ptr, and Aleph::Path< GT >::set_graph().

Referenced by Aleph::Compute_Cycle_In_Digraph< GT, Itor, SA >::operator()().

◆ compute_cycle() [2/2]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
bool Aleph::Tarjan_Connected_Components< GT, Itor, SA >::compute_cycle ( const GT g,
typename GT::Node src,
Path< GT > &  path 
)
inline

Finds and constructs a cycle starting from a specific node, if one exists.

Uses Tarjan's algorithm starting from the specified source node to detect a cycle. If a cycle is found that includes the source node, it is stored in the provided path parameter.

Parameters
[in]gThe directed graph to search for cycles.
[in]srcThe source node from which to start the cycle search.
[out]pathA Path object where the cycle will be stored if found. The path will form a cycle containing the source node.
Returns
true if a cycle was found starting from src, false otherwise.
Exceptions
bad_allocif there is not enough memory.
See also
has_cycle(), compute_cycle(const GT &, Path<GT> &)

Definition at line 926 of file Tarjan.H.

References ah_domain_error_if, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::build_cycle(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::init_tarjan(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::path_ptr, and Aleph::Path< GT >::set_graph().

◆ connected_components() [1/4]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
DynList< DynList< typename GT::Node * > > Aleph::Tarjan_Connected_Components< GT, Itor, SA >::connected_components ( const GT g)
inline

◆ connected_components() [2/4]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
void Aleph::Tarjan_Connected_Components< GT, Itor, SA >::connected_components ( const GT g,
DynList< DynList< typename GT::Node * > > &  blks 
)
inline

Computes the strongly connected components of a digraph.

This overloaded version of connected_components() takes a digraph g (supposedly weakly connected), computes its disconnected subgraphs or components, and stores them in a dynamic list of node lists.

Each list contains the nodes belonging to the strongly connected component.

Use this function if you do not need to obtain mapped copies of the strongly connected components.

The function is based on Tarjan's algorithm.

The function uses the build_subtree bit to mark visited nodes and arcs.

The algorithm internally discovers components through depth-first search.

Since mapping is avoided, this routine is faster and less memory intensive than the previous version. The disadvantage is perhaps that it does not compute the possible arcs that could interconnect a block in a single direction.

Parameters
[in]gthe graph on which to compute its blocks.
[out]blkslist of node lists. Each list contains the nodes that form a connected component.
Exceptions
bad_allocif there is not enough memory to insert into the list.
See also
copy_graph()

Definition at line 698 of file Tarjan.H.

References Aleph::Depth_First, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::df_count, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::init_tarjan(), IS_NODE_VISITED, Aleph::maps(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::n, and Aleph::Tarjan_Connected_Components< GT, Itor, SA >::scc_by_lists().

◆ connected_components() [3/4]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
void Aleph::Tarjan_Connected_Components< GT, Itor, SA >::connected_components ( const GT g,
DynList< GT > &  blk_list,
DynList< typename GT::Arc * > &  arc_list 
)
inline

Computes the strongly connected components of a digraph.

connected_components() takes a digraph g (supposedly weakly connected), computes its disconnected subgraphs or components, and stores them in a dynamic list blk_list of mapped subdigraphs (both nodes and arcs are mapped). The emphasis on the supposed connected character of the graph is because if the graph were not connected, then the resulting list would contain only one element corresponding to the mapped copy digraph of g. If this were the case, then it is preferable to use the copy_graph() function instead.

The function is based on Tarjan's algorithm.

The function uses the build_subtree bit to mark visited nodes and arcs.

The algorithm internally discovers components through depth-first search.

Parameters
[in]gthe graph on which to compute its blocks.
[out]blk_listlist of subgraphs mapped to g containing the disconnected subgraphs or components of g.
[out]arc_listlist of arcs connecting the blocks.
Exceptions
bad_allocif there is not enough memory to build a block or insert into the list.
See also
copy_graph()

Definition at line 626 of file Tarjan.H.

References Aleph::DynList< T >::append(), Aleph::Depth_First, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::df_count, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::g_ptr, GraphCommon< GT, Node, Arc >::get_tgt_node(), Aleph::HTList::Iterator::has_curr(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::init_tarjan(), Aleph::DynListStack< T >::is_empty(), IS_NODE_VISITED, GraphCommon< GT, Node, Arc >::map_arcs(), Aleph::maps(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::n, NODE_COUNTER, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::sa, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::scc_by_blocks(), and Aleph::Tarjan_Connected_Components< GT, Itor, SA >::stack.

Referenced by Aleph::Tarjan_Connected_Components< GT, Itor, SA >::connected_components(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::num_connected_components(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator()(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator()(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator()(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator()(), and Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator()().

◆ connected_components() [4/4]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
void Aleph::Tarjan_Connected_Components< GT, Itor, SA >::connected_components ( const GT g,
DynList< size_t > &  blks 
)
inline

Computes the strongly connected components of a digraph.

This overloaded version of connected_components() takes a digraph g (supposedly weakly connected) and counts its disconnected subgraphs or components along with their sizes.

The function is based on Tarjan's algorithm.

The function uses the build_subtree bit to mark visited nodes and arcs.

The algorithm internally discovers components through depth-first search.

Parameters
[in]gthe graph on which to compute its blocks.
[out]blkslist of positive integers. Each entry contains the size of a distinct connected component.
Exceptions
bad_allocif there is not enough memory to insert into the list.
See also
copy_graph()

Definition at line 751 of file Tarjan.H.

References Aleph::Depth_First, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::df_count, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::init_tarjan(), IS_NODE_VISITED, Aleph::maps(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::n, and Aleph::Tarjan_Connected_Components< GT, Itor, SA >::scc_by_len().

◆ get_filter() [1/2]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
const SA & Aleph::Tarjan_Connected_Components< GT, Itor, SA >::get_filter ( ) const
inlinenoexcept

Returns the arc filter used by this instance (const version).

Returns
Const reference to the arc filter.

Definition at line 982 of file Tarjan.H.

References Aleph::Tarjan_Connected_Components< GT, Itor, SA >::sa.

◆ get_filter() [2/2]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
SA & Aleph::Tarjan_Connected_Components< GT, Itor, SA >::get_filter ( )
inlinenoexcept

Returns the arc filter used by this instance.

Returns
Reference to the arc filter.

Definition at line 977 of file Tarjan.H.

References Aleph::Tarjan_Connected_Components< GT, Itor, SA >::sa.

◆ get_graph()

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
GT * Aleph::Tarjan_Connected_Components< GT, Itor, SA >::get_graph ( ) const
inlinenoexcept

Get the graph of the last computation.

Returns
Pointer to the graph, or nullptr if no computation done.

Definition at line 992 of file Tarjan.H.

References Aleph::Tarjan_Connected_Components< GT, Itor, SA >::g_ptr.

◆ has_computation()

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
bool Aleph::Tarjan_Connected_Components< GT, Itor, SA >::has_computation ( ) const
inlinenoexcept

Check if a computation has been performed.

Returns
true if a graph has been processed, false otherwise.

Definition at line 987 of file Tarjan.H.

References Aleph::Tarjan_Connected_Components< GT, Itor, SA >::g_ptr.

◆ has_cycle() [1/2]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
bool Aleph::Tarjan_Connected_Components< GT, Itor, SA >::has_cycle ( const GT g)
inline

Determines whether the digraph contains at least one cycle.

Uses Tarjan's algorithm to detect if the directed graph has any cycles. A directed graph has a cycle if there exists a path from a vertex back to itself.

Parameters
[in]gThe directed graph to check for cycles.
Returns
true if the graph contains at least one cycle, false otherwise.
Exceptions
bad_allocif there is not enough memory.
See also
is_dag(), compute_cycle()

Definition at line 858 of file Tarjan.H.

References Aleph::Depth_First, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::df_count, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::has_cycle(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::init_tarjan(), IS_NODE_VISITED, Aleph::maps(), and Aleph::Tarjan_Connected_Components< GT, Itor, SA >::n.

◆ has_cycle() [2/2]

◆ init_node_and_push_in_stack()

◆ init_tarjan()

◆ is_connected()

◆ is_dag()

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
bool Aleph::Tarjan_Connected_Components< GT, Itor, SA >::is_dag ( const GT g)
inline

Determines whether the directed graph is acyclic (a DAG).

A Directed Acyclic Graph (DAG) is a directed graph with no cycles. This method is equivalent to !has_cycle(g).

Parameters
[in]gThe directed graph to check.
Returns
true if the graph is a DAG (has no cycles), false otherwise.
Exceptions
bad_allocif there is not enough memory.
See also
has_cycle(), compute_cycle()

Definition at line 879 of file Tarjan.H.

References Aleph::Tarjan_Connected_Components< GT, Itor, SA >::has_cycle(), and Aleph::maps().

◆ is_node_in_stack()

◆ num_connected_components()

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
size_t Aleph::Tarjan_Connected_Components< GT, Itor, SA >::num_connected_components ( const GT g)
inline

Returns the number of strongly connected components in the graph.

This is a convenience method that computes SCCs and returns only the count, which is more efficient than getting the full list when only the count is needed.

Parameters
[in]gThe directed graph.
Returns
The number of strongly connected components.
Exceptions
bad_allocif there is not enough memory.

Definition at line 724 of file Tarjan.H.

References Aleph::Tarjan_Connected_Components< GT, Itor, SA >::connected_components(), Aleph::maps(), and Aleph::HTList::size().

◆ operator()() [1/5]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
DynList< DynList< typename GT::Node * > > Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator() ( const GT g)
inline

◆ operator()() [2/5]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
void Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator() ( const GT g,
DynDlist< DynDlist< typename GT::Node * > > &  blks 
)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Compute strongly connected components and return them as lists of nodes, using DynDlist containers.

Parameters
[in]gThe directed graph.
[out]blksList of strongly connected components, each as a list of nodes.

Definition at line 830 of file Tarjan.H.

References Aleph::DynList< T >::append(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::connected_components(), Aleph::HTList::is_empty(), Aleph::maps(), and Aleph::DynList< T >::remove_first().

◆ operator()() [3/5]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
void Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator() ( const GT g,
DynDlist< GT > &  blk_list,
DynDlist< typename GT::Arc * > &  arc_list 
)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Compute strongly connected components and return them as mapped subgraphs with bridges, using DynDlist containers.

Parameters
[in]gThe directed graph.
[out]blk_listList of strongly connected components as mapped subgraphs.
[out]arc_listList of bridge arcs connecting different SCCs.

Definition at line 802 of file Tarjan.H.

References Aleph::DynList< T >::append(), Aleph::DynDlist< T >::append(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::connected_components(), Aleph::HTList::Iterator::has_curr(), Aleph::maps(), and Aleph::List_Graph< _Graph_Node, _Graph_Arc >::swap().

◆ operator()() [4/5]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
void Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator() ( const GT g,
DynList< DynList< typename GT::Node * > > &  blks 
)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Compute strongly connected components and return them as lists of nodes.

Parameters
[in]gThe directed graph.
[out]blksList of strongly connected components, each as a list of nodes.

Definition at line 782 of file Tarjan.H.

References Aleph::Tarjan_Connected_Components< GT, Itor, SA >::connected_components(), and Aleph::maps().

◆ operator()() [5/5]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
void Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator() ( const GT g,
DynList< GT > &  blk_list,
DynList< typename GT::Arc * > &  arc_list 
)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Compute strongly connected components and return them as mapped subgraphs with bridges (arcs connecting different SCCs).

Parameters
[in]gThe directed graph.
[out]blk_listList of strongly connected components as mapped subgraphs.
[out]arc_listList of bridge arcs connecting different SCCs.

Definition at line 768 of file Tarjan.H.

References Aleph::Tarjan_Connected_Components< GT, Itor, SA >::connected_components(), and Aleph::maps().

◆ operator=() [1/2]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
Tarjan_Connected_Components & Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator= ( const Tarjan_Connected_Components< GT, Itor, SA > &  )
delete

◆ operator=() [2/2]

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
Tarjan_Connected_Components & Aleph::Tarjan_Connected_Components< GT, Itor, SA >::operator= ( Tarjan_Connected_Components< GT, Itor, SA > &&  )
default

◆ pop_from_stack()

◆ scc_by_blocks()

◆ scc_by_len()

◆ scc_by_lists()

◆ test_connectivity()

template<class GT , template< typename, class > class Itor = Out_Iterator, class SA = Dft_Show_Arc<GT>>
bool Aleph::Tarjan_Connected_Components< GT, Itor, SA >::test_connectivity ( const GT g)
inline

Tests whether the digraph is strongly connected.

A directed graph is strongly connected if there is a path from every vertex to every other vertex. This method uses Tarjan's algorithm to determine strong connectivity.

Parameters
[in]gThe directed graph to test.
Returns
true if the graph is strongly connected, false otherwise.
Exceptions
bad_allocif there is not enough memory.
See also
connected_components()

Definition at line 948 of file Tarjan.H.

References Aleph::Depth_First, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::df_count, Aleph::Tarjan_Connected_Components< GT, Itor, SA >::init_tarjan(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::is_connected(), Aleph::DynListStack< T >::is_empty(), IS_NODE_VISITED, Aleph::maps(), Aleph::Tarjan_Connected_Components< GT, Itor, SA >::n, and Aleph::Tarjan_Connected_Components< GT, Itor, SA >::stack.

Member Data Documentation

◆ df_count

◆ g_ptr

◆ n

◆ path_ptr

◆ sa

◆ stack


The documentation for this class was generated from the following file: