\HeaderA{biconnected.components}{Biconnected components}{biconnected.components}
\keyword{graphs}{biconnected.components}
\begin{Description}\relax
Finding the biconnected components of a graph
\end{Description}
\begin{Usage}
\begin{verbatim}
biconnected.components(graph)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{graph}] The input graph. It is treated as an undirected graph,
even if it is directed.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
A graph is biconnected if the removal of any single vertex (and its
adjacent edges) does not disconnect it.

A biconnected component of a graph is a maximal biconnected subgraph
of it. The biconnected components of a graph can be given by the
partition of its edges: every edge is a member of exactly one
biconnected component. Note that this is not true for vertices: the same
vertex can be part of many biconnected components.
\end{Details}
\begin{Value}
A named list with three components:
\begin{ldescription}
\item[\code{no}] Numeric scalar, an integer giving the number of
biconnected components in the graph.
\item[\code{components}] The components themselves, a list of numeric
vectors. Each vector is a set of edge ids giving the edges in a
biconnected component.
\item[\code{articulation\_points}] The articulation points of the graph. See
\code{\LinkA{articulation.points}{articulation.points}}.
\end{ldescription}


See examples below on how to extract the vertex ids of the biconnected
components from the result.
\end{Value}
\begin{Author}\relax
Gabor Csardi \email{csardi@rmki.kfki.hu}
\end{Author}
\begin{SeeAlso}\relax
\code{\LinkA{articulation.points}{articulation.points}}, \code{\LinkA{clusters}{clusters}},
\code{\LinkA{is.connected}{is.connected}}, \code{\LinkA{vertex.connectivity}{vertex.connectivity}}
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
g <- graph.disjoint.union( graph.full(5), graph.full(5) )
clu <- clusters(g)$membership
g <- add.edges(g, c(which(clu==0), which(clu==1))-1)
bc <- biconnected.components(g)
vertices <- lapply(bc$components, function(x) unique(as.vector(get.edges(g, x))))
\end{ExampleCode}
\end{Examples}

