A standard vertex labeling of a graph is an assignment of consecutive integers, starting at either 0 or 1, to the vertices of the graph.
Tree Growing Algorithm
Corollary 4.1.3: A graph is connected if and only if the basic tree-growing algorithm labels all its vertices.
Tree growing in a digraph
Depth-First Search: Choose the frontier edge which has the largest label.
Proposition 4.2.1: Let T be the spanning tree produced by a depth-first search on an undirected connected graph. Let e be a non-tree edge of the graph with endpoints x and y. If the label of x < label of y, then x is an ancestor of y in T.
Breadth-First Search: Choose the frontier edge which has the smallest label.
Proposition 4.2.2: When breadth-first search is applied to an undirected connected graph, the endpoints of each non-tree edge are either at the same level or at consecutive levels in the tree produced.
Finding Cut-vertices of a connected graph
Proposition 4.3.1: A vertex v in a connected graph is a cut-vertex if and only if there exist two distinct vertices u and w, both different from v, such that v is on every u-w path in the graph.
Proposition 4.3.2: Let tree T be the result of applying depth-first search to a connected graph G. Then the root r of T is a cut-vertex of G if and only if r has more than one child in T.
Proposition 4.3.3: Let tree T be the result of applying depth-first search to a connected graph G. Then a non-root v of T is a cut-vertex of G if and only if v has a child w such that no descendant of w is joined to an ancestor of v by a non-tree edge.
Let low(w) be the smallest label assigned to the vertices w and all vertices joined by a non-tree edge to a descendant of w.
Corollary 4.3.4: Let tree T be the result of applying depth-first search to a connected graph G. Then a non-root v of T is a cut-vertex of G if and only if v has a child w such that low(w) label of v.
Using these ideas we can find cut-vertices with the following algorithm:
Algorithm 4.3.2: Finding Cut-Vertices
Initialize set K as empty.
Choose an arbitrary vertex r from the graph.
Do a depth-first search starting at r, resulting in tree T.
If root r has more than one child in T, add r to K.
For each vertex w, compute low(w).
For each non-root v, if there is a child u of v with low(u) label of v, add v to K.
Output K, the set of cut-vertices of the graph.