Graphs
Graphs
• Applications of Depth-First Search
• Undirected graphs:
• Connected components, articulation points, bridges, biconnected components
• Directed graphs:
• Cyclic/acyclic graphs
• Topological sort
• Strongly connected components
Connectivity, connected components
• An undirected graph is called a connected graph if there is a path
between any two vertices.
• A connected component of an undirected graph is a subgraph in
which any two vertices are connected to each other by paths, and
which is connected to no additional vertices in the supergraph.
Connected components – Example
1 5
2 7
6
3 4
Finding Connected Comps by DFS
• DFS-VISIT(G,s) reaches all nodes that are in the same connected
component as s
• The number of connected components is equal with the number of
calls of DFS-VISIT from DFS
Articulation points, Bridges, Biconnected
Components
• Let G = (V;E) be a connected, undirected graph.
• An articulation point of G is a vertex whose removal disconnects G.
• A bridge of G is an edge whose removal disconnects G.
• A biconnected component of G is a maximal set of edges such that
any two edges in the set lie on a common simple cycle
• These concepts are important because they can be used to identify
vulnerabilities of networks
Articulation points – Example
1 5 7
2
6
3 4 8
How to find all articulation points ?
• Brute-force approach: one by one remove all vertices and see if
removal of a vertex causes the graph to disconnect:
For every vertex v, do :
Remove v from graph
See if the graph remains connected (use BFS or DFS)
If graph is disconnected, add v to AP list
Add v back to the graph
• Time complexity of above method is O(V*(V+E)) for a graph
represented using adjacency list.
• Can we do better?
How to find all articulation points ?
• DFS- based-approach:
• We can prove following properties:
1. The root of a DFS-tree is an articulation point if and only if it has at least
two children.
2. A nonroot vertex v of a DFS-tree is an articulation point of G if and only if
has a child s such that there is no back edge from s or any descendant of s
to a proper ancestor of v.
3. Leafs of a DFS-tree are never articulation points
Finding articulation points by DFS
1 5 7
2 2
6
3 4 8
1 4
3 5
Case 1: The root of the DFS-tree is an AP 6
if and only if it has at least 2 children
7
Node 2 is an AP because any node from the first
subtree (1, 2) is connected to any node from the
second subtree (4, 5, 6, 7, 8) by a path that includes node 2. If
node 2 is removed, the 2 subtrees are disconnected
8
Finding articulation points by DFS
1 5 7
2 2
6
3 4 8
1 4
3 5
Case 2: A non-root node of the DFS-tree is an AP if it 6
has a child that is not connected (directly or through its
descendants) by back edges to an ancestor 7
Node 6 is an AP because its child node 7 8
is not connected by back edges to an ancestor of 6
Bridge edges – Example
1 5
2
3 4
How to find all bridges ?
• Brute-force approach: one by one remove all edges and see if
removal of an edge causes the graph to disconnect:
For every edge e, do :
Remove e from graph
See if the graph remains connected (use BFS or DFS)
If graph is disconnected, add e to B list
Add e back to the graph
• Time complexity of above method is O(E*(V+E)) for a graph
represented using adjacency list.
• Can we do better?
How to find all bridges ?
• DFS- approach:
• An edge of G is a bridge if and only if it does not lie on any simple cycle of G.
• if some vertex u has a back edge pointing to it, then no edge below u
in the DFS tree can be a bridge. The reason is that
each back edge gives us a cycle, and no
edge that is a member of a cycle can be a bridge.
• if we have a vertex v whose parent in the DFS tree is u, and no
ancestor of v has a back edge pointing to it, then (u, v) is a bridge.
Biconnected Graph
• An undirected graph is called Biconnected if there are two vertex-
disjoint paths between any two vertices.
• In a Biconnected Graph, there is a simple cycle through any two
vertices.
• A connected graph is Biconnected if it is connected and doesn’t have
any Articulation Point.
Biconnected components – Example
1 5
2
6
3 4
7
8
Finding biconnected components
• Two biconnected components cannot have a common edge, but they
can have a common vertex
• The common vertex of several biconnected components is an
articulation point.
• The articulation points separate the biconnected components of a
graph.
-> We will try to identify the biconnected components while searching for
articulation points
Finding biconnected components
1
3 5
6 7
8
Finding biconnected components
• Algorithm principle:
• During DFS, use a stack to store visited edges (tree edges or back edges)
• After we finish the recursive search from a child v of a vertex u, we check if u is an
articulation point for v. If it is, we output all edges from the stack until (u,v). These edges
form a biconnected component
• When we return to the root of the DFS-tree, we have to output the edges even if the root
is no articulation point (graph may be biconnex) – we will not test the case of the root
being an articulation point
Thank You!!
Applications of DFS
• DFS has many applications
• For undirected graphs:
• Connected components
• Connectivity properties
• For directed graphs:
• Finding cycles
• Topological sorting
• Connectivity properties: Strongly connected components
Directed Acyclic Graphs
• A directed acyclic graph or DAG is a directed graph
with no directed cycles
1 1
2 2
3 3
acyclic cyclic
DFS and cycles in graph
• A graph G is acyclic if a DFS of G results in no back edges
u v w
1/ 2/
4/ 3/
x y z
Topological Sort
• Topological sort of a DAG (Directed Acyclic Graph):
• Linear ordering of all vertices in a DAG G such that vertex u comes before
vertex v if there is an edge (u, v) G
• This property is important for a class of scheduling problems
Example – Topological Sorting
u v w
x y z
• There can be several orderings of the vertices that fulfill the
topological sorting condition:
• u, v, w, y, x, z
• w, z, u, v, y, x
• w, u, v, y, x, z
• …
Topological Sorting
• Algorithm principle:
1. Call DFS to compute finishing time v.f for every vertex
2. As every vertex is finished (BLACK) insert it onto the front of a linked list
3. Return the list as the linear ordering of vertexes
• Time: O(V+E)
Using DFS for Topological Sorting
Correctness of Topological Sort
• Claim: (u,v) G u.f > v.f
• When (u,v) is explored, u is grey
• v = grey (u,v) is back edge. Contradiction, since G is DAG and contains no back edges
• v = white v becomes descendent of u v.f < u.f
(since it must finish v before backtracking and finishing u)
• v = black v already finished v.f < u.f
Applications of DFS
• DFS has many applications
• For undirected graphs:
• Connected components
• Connectivity properties
• For directed graphs:
• Finding cycles
• Topological sorting
• Connectivity properties: Strongly connected components
Strongly Connected Components
• A strongly connected component of a directed graph G=(V,E) is a
maximal set of vertices C such that for every pair of vertices u and v
in C, both vertices u and v are reachable from each other.
Strongly connected components - Example
a b c d
e f g h
Strongly connected components – Example – The
Component Graph
cd
abe
h
fg
The Component Graph results by collapsing each
strong component into a single vertex
The Component Graph
• Property: The Component Graph is a DAG (directed acyclic graph)
Strongly connected components
Strongly connected components of a directed graph G
• Algorithm principle:
1. Call DFS(G) to compute finishing times u.f. for every vertex u
2. Compute GT
3. Call DFS(GT), but in the main loop of DFS, consider the vertices in order of
decreasing u.f. as computed in step 1
4. Output the vertices of each DFS-tree formed in step 3 as the vertices of a
strongly connected component
Strongly connected components - Example
Step1: call DFS(G), compute u.f for all u
a b c d
13/14 11/16 1/10 8/9
12/15 3/4 2/7 5/6
e f g h
Strongly connected components - Example
Step2: compute GT
a b c d
13/14 11/16 1/10 8/9
12/15 3/4 2/7 5/6
e f g h
Strongly connected components - Example
Step3: call DFS(GT), consider vertices in order of decreasing u.f
a b c d
13/14 11/16 1/10 8/9
12/15 3/4 2/7 5/6
e f g h
Strongly connected components - Example
Step3: call DFS(GT), consider vertices in order of decreasing u.f
a b c d
13/14 11/16 1/10 8/9
12/15 3/4 2/7 5/6
e f g h
Strongly connected components - Example
Step3: call DFS(GT), consider vertices in order of decreasing u.f
a b c d
13/14 11/16 1/10 8/9
12/15 3/4 2/7 5/6
e f g h
Strongly connected components - Example
Step3: call DFS(GT), consider vertices in order of decreasing u.f
a b c d
13/14 11/16 1/10 8/9
12/15 3/4 2/7 5/6
e f g h
Strongly connected components - Example
Step3: call DFS(GT), consider vertices in order of decreasing u.f
a b c d
13/14 11/16 1/10 8/9
12/15 3/4 2/7 5/6
e f g h
Thank You!!