s20 Bfs Dfs Apps
s20 Bfs Dfs Apps
APPLICATIONS OF BFS
AND DFS
CSE 2011
Winter 2013
1
3
2
BFS Algorithm (in textbook)
The algorithm uses a mechanism for Algorithm BFS(G, s)
setting and getting labels of L0 new empty sequence
vertices and edges L0.insertLast(s)
setLabel(s, VISITED)
i0
Algorithm BFS(G) while Li.isEmpty()
Input graph G Li +1 new empty sequence
Output labeling of the edges for all v Li.elements()
and partition of the for all e G.incidentEdges(v)
vertices of G if getLabel(e) = UNEXPLORED
for all u G.vertices() w opposite(v,e)
setLabel(u, UNEXPLORED) if getLabel(w) = UNEXPLORED
for all e G.edges() setLabel(e, DISCOVERY)
setLabel(w, VISITED)
setLabel(e, UNEXPLORED)
Li +1.insertLast(w)
for all v G.vertices() else
if getLabel(v) = UNEXPLORED setLabel(e, CROSS)
BFS(G, v) i i +1
5 Breadth-First Search
Example
L0
unexplored vertex A
A
A visited vertex L1
B C D
unexplored edge
discovery edge E F
cross edge
L0 L0
A A
L1 L1
B C D B C D
E F E F
6 Breadth-First Search
3
Example (2)
L0 L0
A A
L1 L1
B C D B C D
L2
E F E F
L0 L0
A A
L1 L1
B C D B C D
L2 L2
E F E F
7 Breadth-First Search
Example (3)
L0 L0
A A
L1 L1
B C D B C D
L2 L2
E F E F
L0
A
L1
B C D
L2
E F
8 Breadth-First Search
4
9
COMPUTING
SPANNING TREES
10
Trees
Tree: a connected graph without cycles.
Given a connected graph, remove the cycles a tree.
The paths found by BFS(s) form a rooted tree (called a spanning
tree), with the starting vertex as the root of the tree.
5
11
12
COMPUTING
SPANNING FORESTS
6
13
14
Example
A graph with 3 components
P
Q
N
L R
O
M D s
E
C
A
F
B
K
G
7
15
Example of a Forest
We removed the cycles
from the previous graph.
P
Q
N
L R
O
M D s
E
16
8
17
Applications of DFS
Is there a path from source s to a vertex v?
Is an undirected graph connected?
Is a directed graph strongly connected?
To output the contents (e.g., the vertices) of a graph
To find the connected components of a graph
To find out if a graph contains cycles and report cycles.
To construct a DSF tree/forest from a graph
18
9
DFS Algorithm
q The algorithm uses a mechanism
for setting and getting labels Algorithm DFS(G, v)
of vertices and edges Input graph G and a start vertex v of G
Algorithm DFS(G) Output labeling of the edges of G
Input graph G in the connected component of v
as discovery edges and back edges
Output labeling of the edges of G
as discovery edges and setLabel(v, VISITED)
back edges for all e G.incidentEdges(v)
for all u G.vertices() if getLabel(e) = UNEXPLORED
setLabel(u, UNEXPLORED) w opposite(v,e)
for all e G.edges() if getLabel(w) = UNEXPLORED
setLabel(e, UNEXPLORED) setLabel(e, DISCOVERY)
for all v G.vertices() DFS(G, w)
if getLabel(v) = UNEXPLORED else
DFS(G, v) setLabel(e, BACK)
Example
A
A unexplored vertex
A visited vertex
B D E
unexplored edge
discovery edge C
back edge
A A
B D E B D E
C C
10
Example (cont.)
A A
B D E B D E
C C
A A
B D E B D E
C C
22
DFS Tree
Resulting DFS-tree.
Notice it is much deeper
than the BFS tree.
11
23
24
12
25
Biconnected components
L0
A A
L1
B C D B C D
L2
E F E F
DFS BFS
26
Next lecture
Review
Final Exam
Wednesday, April 17, 9:00-12:00
13