Graph Search Methods
• A vertex u is reachable from vertex v iff there
is a path from v to u.
2
3
8
1
4
5
9
10
6
7 11
1
Graph Search Methods
• A search method starts at a given vertex v and
visits/labels/marks every vertex that is
reachable from v.
2
3
8
1
4
5
9
10
6
7 11
2
Graph Search Methods
• Many graph problems are solved using a
search method.
Path from one vertex to another.
Is the graph connected?
Find a spanning tree, etc.
• Commonly used search methods:
Depth-first search(DFS).
Breadth-first search(BFS).
3
Depth-First Search
dfs ( v )
{
Label vertex v as reached.
for (each unreached vertex u
adjacenct from v )
dfs( u );
}
4
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Start search at vertex 1.
Label vertex 1 and do a depth first search from either 2 or 4.
Suppose that vertex 2 is selected.
5
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Label vertex 2 and do a depth first search from either 3, 5, or 6.
Suppose that vertex 5 is selected.
6
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Label vertex 5 and do a depth first search from either 3, 7, or 9.
Suppose that vertex 9 is selected.
7
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Label vertex 9 and do a depth first search from either 6 or 8.
Suppose that vertex 8 is selected.
8
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Label vertex 8 and return to vertex 9.
From vertex 9 do a DFS(6).
9
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Label vertex 6 and do a depth first search from either
4 or 7.
Suppose that vertex 4 is selected.
10
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Label vertex 4 and return to 6.
From vertex 6 do a dfs(7).
11
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Label vertex 7 and return to 6.
Return to 9.
12
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Return to 5.
13
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Do a dfs(3).
14
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Label 3 and return to 5.
Return to 2.
15
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Return to 1.
16
Depth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Return to invoking method.
17
Depth-First Search Property
All vertices reachable from the
start vertex (including the start
vertex) are visited.
18
Path From Vertex v To Vertex u
Start a depth-first search at vertex v.
Terminate when vertex u is visited or when dfs
ends (whichever occurs first).
Time
O(n2) when adjacency matrix used
O(n+e) when adjacency lists used (e is number of
edges)
19
Is The Graph Connected?
Start a depth-first search at any vertex of
the graph.
Graph is connected iff all n vertices get
visited.
Time
O(n2) when adjacency matrix used
when adjacency lists used (e is
O(n+e)
number of edges)
20
Connected Components
Start a depth-first search at any as yet
unvisited vertex of the graph.
Newly visited vertices (plus edges between
them) define a component.
Repeat until all vertices are visited.
21
22
Connected Components
2
3
8
1
4
5
9
10
6
7 11
23
Time Complexity
O(n2) when adjacency matrix used
O(n+e) when adjacency lists used
(e is number of edges)
24
Spanning Tree
2
3
8
1
4
5
9
6
7
Depth-first search from vertex 1.
Depth-first spanning tree.
25
Spanning Tree
Start a depth-first search at any vertex of the
graph.
If graph is connected, the n-1 edges used to
get to unvisited vertices define a spanning tree
(depth-first spanning tree).
Time
O(n2) when adjacency matrix used
O(n+e) when adjacency lists used (e is
number of edges)
26
Breadth-First Search
Visit start vertex and put into a FIFO
queue.
Repeatedly remove a vertex from the
queue, visit its unvisited adjacent
vertices, put newly visited vertices into
the queue.
27
Breadth-First Search Example
2
3
8
1
4
5
9
10
6
7 11
Start search at vertex 1.
28
Breadth-First Search Example
2 FIFO Queue
3
1
8 1
4
5
9
10
6
7 11
Visit/mark/label start vertex and put in a FIFO queue.
29
Breadth-First Search Example
2
3
FIFO Queue
8
1
1
4
5
9
10
6
7 11
Remove 1 from Q; visit adjacent unvisited vertices;
put in Q.
30
Breadth-First Search Example
2
3
8 FIFO Queue
1
2 4
4
5
9
10
6
7 11
Remove 1 from Q; visit adjacent unvisited vertices;
put in Q.
31
Breadth-First Search Example
2
3
8 FIFO Queue
1
2 4
4
5
9
10
6
7 11
Remove 2 from Q; visit adjacent unvisited vertices;
put in Q.
32
Breadth-First Search Example
2
3
8
FIFO Queue
1
4 5 3 6
4
5
9
10
6
7 11
Remove 2 from Q; visit adjacent unvisited vertices;
put in Q.
33
Breadth-First Search Example
2
3
8 FIFO Queue
1
4 5 3 6
4
5
9
10
6
7 11
Remove 4 from Q; visit adjacent unvisited vertices;
put in Q.
34
Breadth-First Search Example
2
3
1
8 FIFO Queue
5 3 6
4
5
9
10
6
7 11
Remove 4 from Q; visit adjacent unvisited
vertices; put in Q.
35
Breadth-First Search Example
2
3 FIFO Queue
8
1 5 3 6
4
5
9
10
6
7 11
Remove 5 from Q; visit adjacent unvisited
vertices; put in Q.
36
Breadth-First Search Example
2
3 FIFO Queue
8
1 3 6 9 7
4
5
9
10
6
7 11
Remove 5 from Q; visit adjacent unvisited
vertices; put in Q.
37
Breadth-First Search Example
2
3
8
FIFO Queue
1
36 97
4
5
9
10
6
7 11
Remove 3 from Q; visit adjacent unvisited vertices;
put in Q.
38
Breadth-First Search Example
2
3 FIFO Queue
8
1 6 9 7
4
5
9
10
6
7 11
Remove 3 from Q; visit adjacent unvisited
vertices; put in Q.
39
Breadth-First Search Example
2
3
8
FIFO Queue
1
6 9 7
4
5
9
10
6
7 11
Remove 6 from Q; visit adjacent unvisited vertices;
put in Q.
40
Breadth-First Search Example
2
3 FIFO Queue
8 9 7
1
4
5
9
10
6
7 11
Remove 6 from Q; visit adjacent unvisited vertices;
put in Q.
41
Breadth-First Search Example
2
3 FIFO Queue
8
1 9 7
4
5
9
10
6
7 11
Remove 9 from Q; visit adjacent unvisited vertices;
put in Q.
42
Breadth-First Search Example
2 FIFO Queue
3
8 7 8
1
4
5
9
10
6
7 11
Remove 9 from Q; visit adjacent unvisited vertices;
put in Q.
43
Breadth-First Search Example
2
3 FIFO Queue
8
1 7 8
4
5
9
10
6
7 11
Remove 7 from Q; visit adjacent unvisited vertices;
put in Q.
44
Breadth-First Search Example
2
3 FIFO Queue
8
1 8
4
5
9
10
6
7 11
Remove 7 from Q; visit adjacent unvisited vertices;
put in Q.
45
Breadth-First Search Example
2
3
FIFO Queue
8
1 8
4
5
9
10
6
7 11
Remove 8 from Q; visit adjacent unvisited vertices;
put in Q.
46
Breadth-First Search Example
2
3 FIFO Queue
8
1
4
5
9
10
6
7 11
Queue is empty. Search terminates.
47
Time Complexity
Each visited vertex is put on (and so removed
from) the queue exactly once.
When a vertex is removed from the queue,
we examine its adjacent vertices.
O(n) if adjacency matrix used
O(vertex degree) if adjacency lists used
Total time
O(mn), where m is number of vertices in
the component that is searched (adjacency
matrix)
48
Time Complexity
O(n + sum of component vertex
degrees) (adj. lists)
= O(n + number of edges in
component)
49
Breadth-First Search Properties
Same complexity as dfs.
Same properties with respect to path finding,
connected components, and spanning trees.
Edges used to reach unlabeled vertices define a
depth-first spanning tree when the graph is
connected.
There are problems for which bfs is better than
dfs and vice versa.
50
BFS and DFS
• More suitable for finding the • More suitable for finding the
shortest path or the closest longest path or the farthest
node to the starting node in node from the starting node.
an unweighted graph • DFS is often used to find a
• Web Crawling: When path from the entrance to the
crawling websites or exit in a maze.
searching for resources in a • DFS can identify cycles in a
network, BFS is more suitable graph.
because it explores resources
at the current level (e.g., • DFS is used in AI algorithms,
webpages) before going such as game-playing
deeper, ensuring a algorithms (e.g., chess and tic-
systematic and tac-toe) and problem-solving
comprehensive search. agents, to explore possible
states or game trees.
51