0% found this document useful (0 votes)
12 views

Lecture 24 - Graph Traversals

Uploaded by

sans42699
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views

Lecture 24 - Graph Traversals

Uploaded by

sans42699
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 59

Data Structures

24. Graph Traversal/Searching

24-Graph Traversal 1
Graph Traversal

• Given a graph G = (V, E), directed or undirected


– Goal is to methodically explore every vertex and every edge

• Traversals of graphs are also called searches

• We can use either breadth-first or depth-first traversals


– Breadth-first requires a queue
– Depth-first requires a stack

24-Graph Traversal 2
Breadth-First Search

• Choose any vertex, mark it as visited and enqueue it into queue


• While the queue is not empty
– Dequeue top vertex v from the queue
– For each vertex adjacent to v that has not been visited
➢ Mark it visited, and
➢ Enqueue it into the queue

1:create a queue Q
2:mark v as visited and put v into Q
3:while Q is non-empty
4: remove the head u of Q (Dequeue)
5: mark and enqueue all (unvisited) neighbors of u

• The above algorithm continues until the queue is empty!


– If there are no unvisited vertices, the graph is connected

24-Graph Traversal 3
Breadth-First Search – Example

2 4 8

s 5 7

3 6 9

Queue (Q):
Undiscovered
Discovered
Top of queue
1: Create a Queue Q
Finished
24-Graph Traversal 4
Breadth-First Search – Example

2 4 8

0 S 5 7

3 6 9

Queue (Q):
Undiscovered
S
Discovered
Top of queue
2: Mark S as visited and put S into Q
Finished
24-Graph Traversal 5
Breadth-First Search – Example

2 4 8

0 S 55 7

33 6 9

Queue (Q):
Undiscovered
S
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., S)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 6
Breadth-First Search – Example

2 4 8

0 S 55 7

33 6 9

Queue (Q):
Undiscovered
235
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 2)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 7
Breadth-First Search – Example

2 44 8

0 S 5 already discovered:
55 7
don't enqueue

33 6 9

Queue (Q):
Undiscovered
235
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 2)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 8
Breadth-First Search – Example

2 44 8

0 S 5 already discovered:
55 7
don't enqueue

33 6 9

Queue (Q):
Undiscovered
235
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 2)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 9
Breadth-First Search – Example

2 44 8

0 S 55 7

33 6 9

Queue (Q):
Undiscovered
354
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 3)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 10
Breadth-First Search – Example

2 44 8

0 S 5 already discovered:
55 7
don't enqueue

33 66 9

Queue (Q):
Undiscovered
354
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 3)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 11
Breadth-First Search – Example

2 44 8

0 S 5 already discovered:
55 7
don't enqueue

33 66 9

Queue (Q):
Undiscovered
354
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 3)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 12
Breadth-First Search – Example

2 44 8

0 S 55 7

33 66 9

Queue (Q):
Undiscovered
546
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 5)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 13
Breadth-First Search – Example

2 44 8

0 S 55 7

6 already discovered:
33 66 9
don't enqueue

Queue (Q):
Undiscovered
546
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 5)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 14
Breadth-First Search – Example

2 44 8

0 S 55 7

33 66 9

Queue (Q):
Undiscovered
46
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 4)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 15
Breadth-First Search – Example

2 44 88

0 S 5 already discovered:
55 7
don't enqueue

33 66 9

Queue (Q):
Undiscovered
46
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 4)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 16
Breadth-First Search – Example

2 44 88

0 S 55 7

33 66 9

Queue (Q):
Undiscovered
68
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 6)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 17
Breadth-First Search – Example

2 44 88

0 S 55 7

33 66 99

Queue (Q):
Undiscovered
68
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 6)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 18
Breadth-First Search – Example

2 44 88

0 S 55 7

33 66 99

Queue (Q):
Undiscovered
879
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 8)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 19
Breadth-First Search – Example

2 44 88

0 S 55 7

33 66 99

Queue (Q):
Undiscovered
79
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 7)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 20
Breadth-First Search – Example

2 44 88

4, 5, 8 already
0 S 55 7
discovered.

33 66 99

Queue (Q):
Undiscovered
79
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 7)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 21
Breadth-First Search – Example

2 44 88

0 S 55 7

33 66 99

Queue (Q):
Undiscovered
9
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 9)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 22
Breadth-First Search – Example

2 44 88

0 S 55 7

7 & 8 already
33 66 99
discovered.

Queue (Q):
Undiscovered
9
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., 9)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 23
Breadth-First Search – Example

2 44 88

0 S 55 7

33 66 99

Queue (Q):
Undiscovered
Discovered
Top of queue 3: While Q not empty
4: v = dequeue Q (i.e., NULL)
Finished 5: mark & enqueue all (unvisited) neighbors of v
24-Graph Traversal 24
Breadth-First Search – Example

2 44 88

0 S 55 7

33 66 99

Breadth-First Search (BFS) tree rooted at S containing all nodes of the graph

24-Graph Traversal 25
Breadth-First Search – Properties
• Given a graph G=(V,E) and source vertex S, the following holds
for the BFS algorithm

– Systematically explores the edges of G to “discover” every vertex


reachable from S

– Creates a BFS tree rooted at S that contains all such vertices

– Discovers all vertices at distance k from S before discovering any


vertices at distance k+1

24-Graph Traversal 26
Depth-First Search – Trees

• A depth-first search (DFS) explores


a path all the way to a leaf before A
backtracking and exploring another
path
B C
• For example, after searching A, then
B, then D, the search backtracks and
D E F G
tries another path from B

• N will be found before J H I J K

• Node are explored in the order A B L M N O P Q


DEHLMNIOPCFGJKQ

24-Graph Traversal 27
Depth-First Search

• Choose any vertex, mark it as visited


• From that vertex:
– If there is another adjacent vertex not yet visited, go to it
– Otherwise, go back to the most previous vertex that has not yet had
all of its adjacent vertices visited and continue from there
• Continue until no visited vertices have unvisited adjacent vertices
Create a stack S
Mark v as visited and push v onto S
while S is non-empty
peek at the top u of S
if u has an (unvisited) neighbor w
mark w and push it onto S
else
pop S
24-Graph Traversal 28
Depth-First Search – Example Adjacency List
A: FCBG
A B: A
C: A
D: FE
E: GFD
F: AED
B C G
G: EA

D E

Undiscovered
Marked
Active
Finished 24-Graph Traversal 29
Depth-First Search – Example Adjacency List
A: FCBG
AA B: A
C: A
D: FE
E: GFD
F: AED
B C G
G: EA

D E

Undiscovered
Marked
Active
Finished 24-Graph Traversal 30
Depth-First Search – Example Adjacency List
A: FCBG
AA B: A
C: A
D: FE
E: GFD
F: AED
B C G
G: EA

D E

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 31
Depth-First Search – Example Adjacency List
A: FCBG
AA B: A
C: A
D: FE
E: GFD
F: AED
B C G
G: EA

D E
F newly
discovered
F
F

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 32
Depth-First Search – Example Adjacency List
A: FCBG
AA B: A
C: A
D: FE
A already E: GFD
marked F: AED
B C G
G: EA

D E

visit(F)
FF (F, A) (F, E) (F, D)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 33
Depth-First Search – Example Adjacency List
A: FCBG
AA B: A
C: A
D: FE
E: GFD
F: AED
B C G
G: EA

D E E newly
discovered
visit(F)
FF (F, A) (F, E) (F, D)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 34
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
B C G G: EA

visit(E)
D E
E (E, G) (E, F) (E, D)

visit(F)
FF (F, A) (F, E) (F, D)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 35
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
G newly D: FE
discovered E: GFD
F: AED
B C GG G: EA

visit(E)
D E
E (E, G) (E, F) (E, D)

visit(F)
FF (F, A) (F, E) (F, D)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 36
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
visit(G) G: EA
B C GG
(G, E) (G, A)

visit(E)
D E
E (E, G) (E, F) (E, D)
E already visit(F)
FF marked (F, A) (F, E) (F, D)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 37
Adjacency List
Depth-First Search – Example A: FCBG
B: A
A already C: A
AA
marked D: FE
E: GFD
F: AED
visit(G) G: EA
B C GG
(G, E) (G, A)

visit(E)
D E
E (E, G) (E, F) (E, D)
visit(F)
FF (F, A) (F, E) (F, D)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 38
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA Finished G C: A
Pop G D: FE
E: GFD
F: AED
visit(G) G: EA
B C GG
(G, E) (G, A)

visit(E)
D E
E (E, G) (E, F) (E, D)
visit(F)
FF (F, A) (F, E) (F, D)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 39
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
B C GG G: EA

visit(E)
D E
E (E, G) (E, F) (E, D)

visit(F)
FF F already
(F, A) (F, E) (F, D)
marked

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 40
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
B C GG G: EA

visit(E)
D newly
discovered
D
D E
E (E, G) (E, F) (E, D)

visit(F)
FF (F, A) (F, E) (F, D)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 41
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
visit(D) F: AED
(D, F) (D, E) G: EA
B C GG
visit(E)
D
D E
E (E, G) (E, F) (E, D)

visit(F)
FF (F, A) (F, E) (F, D)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 42
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
visit(D) F: AED
(D, F) (D, E) G: EA
B C GG
visit(E)
D
D E
E (E, G) (E, F) (E, D)

visit(F)
FF F already
(F, A) (F, E) (F, D)
marked

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 43
Adjacency List
Depth-First Search – Example A: FCBG
B: A
Finished D
AA C: A
Pop D
D: FE
E: GFD
visit(D) F: AED
(D, F) (D, E) G: EA
B C GG
visit(E)
D
D E
E (E, G) (E, F) (E, D)

visit(F)
FF E already
(F, A) (F, E) (F, D)
marked

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 44
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
B C GG G: EA

visit(E)
D
D E
E (E, G) (E, F) (E, D)

visit(F)
FF (F, A) (F, E) (F, D)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 45
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
Finished E E: GFD
Pop E F: AED
B C GG G: EA

visit(E)
D
D E
E (E, G) (E, F) (E, D)

visit(F)
FF (F, A) (F, E) (F, D)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 46
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
B C GG G: EA
Finished F
Pop F
D
D E
E
visit(F)
FF D already
(F, A) (F, E) (F, D)
marked

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 47
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
C newly G: EA
discovered B C GG

D
D E
E

FF

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 48
Adjacency List
Depth-First Search – Example A: FCBG
B: A
A already
AA C: A
marked
D: FE
E: GFD
F: AED
B C
C GG G: EA

D
D E
E
visit(C)
FF (C, A)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 49
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
B C
C GG G: EA
Finished C
Pop C
D
D E
E
visit(C)
FF (C, A)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 50
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
B C
C GG G: EA

D
D E
E

FF

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 51
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
B newly G: EA
discovered BB C
C GG

D
D E
E

FF

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 52
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
A already F: AED
marked
BB C
C GG G: EA
Finished B
Pop B
D
D E
E
visit(B)
FF
(B, A)

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 53
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
BB C
C GG G: EA

D
D E
E

FF

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 54
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
G already D: FE
marked E: GFD
F: AED
BB C
C GG G: EA

D
D E
E
Finished A
Pop A
FF

Undiscovered visit(A)
Marked (A, F) (A, C) (A, B) (A, G)
Active Stack
Finished 24-Graph Traversal 55
Adjacency List
Depth-First Search – Example A: FCBG
B: A
AA C: A
D: FE
E: GFD
F: AED
BB C
C GG G: EA

D
D E
E

FF

Undiscovered
Marked
Active
Finished 24-Graph Traversal 56
BFS vs. DFS

• Depending on the application, either DFS or BFS could be


advantageous

• Example: Consider your family tree

– If you are searching for some of your siblings/cousins then it would be


safe to assume that person would be on the bottom of the tree

– Which approach is better in this case?

➢ In general, both approaches have the same time complexity

➢ In worst case, they need to visit all the nodes

24-Graph Traversal 57
Applications of Graph Traversal

• Determining connectedness and finding connected sub-graphs

• Construct a BFS or DFS tree/forest from a graph

• Determining the path length from one vertex to all others


– Find the shortest path from a vertex s to a vertex v (BFS)

24-Graph Traversal 58
Any Question So Far?

24-Graph Traversal 59

You might also like