WEEK 13
Graphs V
Depth-First Search, Depth-First
Spanning Tree, Biconnectivity
CE222 – Data Structures & Algorithms II
Chapter 9.6.1, 9.6.2
(based on the book by M. A. Weiss, Data Structures and Algorithm Analysis in C++, 3rd edition, 2006)
2012-2013 Spring
Depth First Search
• Depth-first search is a generalization of preorder traversal.
• Starting at some vertex, v, we process v and then recursively
traverse all vertices adjacent to v.
• If this process is performed on a tree, then all tree vertices
are systematically visited in a total of O(|E|) time
• Preorder traversal :
– Visit Root
– Visit Left Subtree
– Visit Right Subtree
2
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
Depth First Search
• If we perform this process on an arbitrary
graph, we need to be careful to avoid cycles.
• To do this, when we visit a vertex v, we mark
it visited, since now we have been there, and
recursively call depth-first search on all
adjacent vertices that are not already marked.
3
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
Depth First Search Algorithm
void dfs( vertex v )
{
visited[v] = TRUE;
for each w adjacent to v
if( !visited[w] )
dfs( w );
}
4
Because this
strategy guarantees
that each edge is
encountered only
once, the total time
to perform the
traversal is O(|E| + |
V|), as long as
adjacency lists are
used.
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
Depth First Spanning Tree
The root of the tree is A, the first vertex visited. Each edge
(v, w) in the graph is present in the tree:
•If, when we process (v, w), we find that w is unmarked, or
if, when we process (w, v), we find that v is unmarked, we
indicate this with a tree edge.
•If, when we process (v, w), we find that w is already
marked, and when processing (w, v), we find that v is
already marked, we draw a dashed line, which we will call a
back edge, to indicate that this "edge" is not really part of
the tree.
5
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
Undirected graph and Depth First Spanning Tree
6
A preorder numbering of the tree (using only tree edges) will tell
us the order in which vertices are marked. Preorder traversal, in
this case, is:
Visit Root, Visit Children.
If the tree is not connected then processing all nodes requires
several calls to dfs  depth first spanning forest
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
• A connected undirected graph is biconnected if
there are no vertices whose removal disconnects the
rest of the graph.
Example :
If the nodes are computers and the edges are links,
then if any computer goes down, network mail is
unaffected, except, of course, at the down
computer.
Biconnectivity
7
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
Biconnectivity
• If a graph is not biconnected, the vertices
whose removal would disconnect the graph
are known as articulation points. These nodes
are critical in many applications.
8
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
Biconnectivity
• The graph below is not biconnected: C and D
are articulation points. The removal of C
would disconnect G, and the removal of D
would disconnect E and F, from the rest of the
graph
9
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
Biconnectivity
• Depth-first search provides a linear-time
algorithm to find all articulation points in a
connected graph.
1. Starting at any vertex, perform a depth-first search
and number the nodes as they are visited: num(v).
2. For every vertex v in the depth-first spanning tree,
compute the lowest-numbered vertex called low(v),
that is reachable from v by taking zero or more tree
edges and then possibly one back edge (in that
order).
10
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
Biconnectivity
• The depth-first spanning tree shows the
preorder number first, and then the
lowest-numbered vertex reachable
• (For each node num/low is given in the tree)
11
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
Biconnectivity
• The lowest-numbered vertex , low(v), can be efficiently
computed by performing a postorder traversal of the
depth-first spanning tree, and it is the minimum of
1) num(v)
2) the lowest num(w) among all back edges (v, w)
3) the lowest low(w) among all tree edges (v, w)
12
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
Biconnectivity: How to decide
Articulation Points
• The root is an articulation point if and only if it has more
than one child (because if it has two children, removing
the root disconnects nodes in different subtrees, and if it
has only one child, removing the root merely disconnects
the root.)
• Any other vertex v is an articulation point if and only if v
has some child w such that low(w) ≥ num(v).
Example:
Vertex D is an articulation point
 low(E)= 4 ≥ num(D)=4
Vertex C is an articulation point
 low(G)= 7 ≥ num(C)=3
13
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
1) Computing num(v)
• A preorder
traversal to
compute
num(v).
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
14
2) Computing low(v)
• A postorder
traversal to
compute
low(v).
• To save a third
traversal for
finding
articulation
points, it is also
incorporated
into the second
pass.
CE 222-Data Structures & Algorithms II,
Izmir University of Economics
15
Articulation point algorithm
(All phases combined)
16
Do not forget to study Figures 9.65, 9.66, and 9.67! (assigning
num(v) and low(v) and finding articulation points)
CE 222-Data Structures & Algorithms II,
Izmir University of Economics

2.5 graph dfs

  • 1.
    WEEK 13 Graphs V Depth-FirstSearch, Depth-First Spanning Tree, Biconnectivity CE222 – Data Structures & Algorithms II Chapter 9.6.1, 9.6.2 (based on the book by M. A. Weiss, Data Structures and Algorithm Analysis in C++, 3rd edition, 2006) 2012-2013 Spring
  • 2.
    Depth First Search •Depth-first search is a generalization of preorder traversal. • Starting at some vertex, v, we process v and then recursively traverse all vertices adjacent to v. • If this process is performed on a tree, then all tree vertices are systematically visited in a total of O(|E|) time • Preorder traversal : – Visit Root – Visit Left Subtree – Visit Right Subtree 2 CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 3.
    Depth First Search •If we perform this process on an arbitrary graph, we need to be careful to avoid cycles. • To do this, when we visit a vertex v, we mark it visited, since now we have been there, and recursively call depth-first search on all adjacent vertices that are not already marked. 3 CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 4.
    Depth First SearchAlgorithm void dfs( vertex v ) { visited[v] = TRUE; for each w adjacent to v if( !visited[w] ) dfs( w ); } 4 Because this strategy guarantees that each edge is encountered only once, the total time to perform the traversal is O(|E| + | V|), as long as adjacency lists are used. CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 5.
    Depth First SpanningTree The root of the tree is A, the first vertex visited. Each edge (v, w) in the graph is present in the tree: •If, when we process (v, w), we find that w is unmarked, or if, when we process (w, v), we find that v is unmarked, we indicate this with a tree edge. •If, when we process (v, w), we find that w is already marked, and when processing (w, v), we find that v is already marked, we draw a dashed line, which we will call a back edge, to indicate that this "edge" is not really part of the tree. 5 CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 6.
    Undirected graph andDepth First Spanning Tree 6 A preorder numbering of the tree (using only tree edges) will tell us the order in which vertices are marked. Preorder traversal, in this case, is: Visit Root, Visit Children. If the tree is not connected then processing all nodes requires several calls to dfs  depth first spanning forest CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 7.
    • A connectedundirected graph is biconnected if there are no vertices whose removal disconnects the rest of the graph. Example : If the nodes are computers and the edges are links, then if any computer goes down, network mail is unaffected, except, of course, at the down computer. Biconnectivity 7 CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 8.
    Biconnectivity • If agraph is not biconnected, the vertices whose removal would disconnect the graph are known as articulation points. These nodes are critical in many applications. 8 CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 9.
    Biconnectivity • The graphbelow is not biconnected: C and D are articulation points. The removal of C would disconnect G, and the removal of D would disconnect E and F, from the rest of the graph 9 CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 10.
    Biconnectivity • Depth-first searchprovides a linear-time algorithm to find all articulation points in a connected graph. 1. Starting at any vertex, perform a depth-first search and number the nodes as they are visited: num(v). 2. For every vertex v in the depth-first spanning tree, compute the lowest-numbered vertex called low(v), that is reachable from v by taking zero or more tree edges and then possibly one back edge (in that order). 10 CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 11.
    Biconnectivity • The depth-firstspanning tree shows the preorder number first, and then the lowest-numbered vertex reachable • (For each node num/low is given in the tree) 11 CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 12.
    Biconnectivity • The lowest-numberedvertex , low(v), can be efficiently computed by performing a postorder traversal of the depth-first spanning tree, and it is the minimum of 1) num(v) 2) the lowest num(w) among all back edges (v, w) 3) the lowest low(w) among all tree edges (v, w) 12 CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 13.
    Biconnectivity: How todecide Articulation Points • The root is an articulation point if and only if it has more than one child (because if it has two children, removing the root disconnects nodes in different subtrees, and if it has only one child, removing the root merely disconnects the root.) • Any other vertex v is an articulation point if and only if v has some child w such that low(w) ≥ num(v). Example: Vertex D is an articulation point  low(E)= 4 ≥ num(D)=4 Vertex C is an articulation point  low(G)= 7 ≥ num(C)=3 13 CE 222-Data Structures & Algorithms II, Izmir University of Economics
  • 14.
    1) Computing num(v) •A preorder traversal to compute num(v). CE 222-Data Structures & Algorithms II, Izmir University of Economics 14
  • 15.
    2) Computing low(v) •A postorder traversal to compute low(v). • To save a third traversal for finding articulation points, it is also incorporated into the second pass. CE 222-Data Structures & Algorithms II, Izmir University of Economics 15
  • 16.
    Articulation point algorithm (Allphases combined) 16 Do not forget to study Figures 9.65, 9.66, and 9.67! (assigning num(v) and low(v) and finding articulation points) CE 222-Data Structures & Algorithms II, Izmir University of Economics