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

Lecture 24 - Graph Traversals

Uploaded by

sans42699
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

Lecture 24 - Graph Traversals

Uploaded by

sans42699
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
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