# is_semiconnected#

is_semiconnected(G)[source]#

Returns True if the graph is semiconnected, False otherwise.

A graph is semiconnected if and only if for any pair of nodes, either one is reachable from the other, or they are mutually reachable.

This function uses a theorem that states that a DAG is semiconnected if for any topological sort, for node $$v_n$$ in that sort, there is an edge $$(v_i, v_{i+1})$$. That allows us to check if a non-DAG G is semiconnected by condensing the graph: i.e. constructing a new graph H with nodes being the strongly connected components of G, and edges (scc_1, scc_2) if there is a edge $$(v_1, v_2)$$ in G for some $$v_1 \in scc_1$$ and $$v_2 \in scc_2$$. That results in a DAG, so we compute the topological sort of H and check if for every $$n$$ there is an edge $$(scc_n, scc_{n+1})$$.

Parameters:
GNetworkX graph

A directed graph.

Returns:
semiconnectedbool

True if the graph is semiconnected, False otherwise.

Raises:
NetworkXNotImplemented

If the input graph is undirected.

NetworkXPointlessConcept

If the graph is empty.

Examples

>>> G = nx.path_graph(4, create_using=nx.DiGraph())
>>> print(nx.is_semiconnected(G))
True
>>> G = nx.DiGraph([(1, 2), (3, 2)])
>>> print(nx.is_semiconnected(G))
False