Applications
•
Find shortest path between vertices
•
Find if/where an element is in a graph
•
Several algorithms build upon BFS
–
Djikstra’s algorithm
–
Primm’s algorithm
–
Ford-Fulkersons algorithm
Basic Algorithm
•
Start at some vertex
•
Search for another vertex
•
Search by looking at closest vertices
•
Continue search by looking at the next closest
vertices
Algorithm Details
•
Graph can be represented as an adjacency matrix
•
In addition each vertex has the following
–
Parent vertex
–
Distance from source
–
State
•
Undiscovered
•
Discovered_A
– with at least one undiscovered adjacent vertex
•
Discovered_N
– with no undiscovered adjacent vertices
Algorithm Details
•
Maintain a FIFO queue of visited vertices
•
Add the source vertex to the queue
•
While the queue is not empty or desired vertex
is not found
–
Remove first vertex (U) in the queue
–
For each adjacent vertex (V) to vertex U
•
If V has not been discovered
–
Set state to Discovered_A
–
Set distance to U.distance + 1
Example Notes
•
Vertex State
–
Undiscovered = White
–
Discovered_A = Yellow
–
Discovered_N = Black
•
Edge State
–
Unvisited = Black
–
Visited = Yellow
Example 1 Notes
•
Source vertex = A
•
Searching to find shortest path to all other
Example 1
8
B
A
D
C
E
F
G
H
J
I
K
L
Example 1
Vertex
Parent
Vertex
From Source
Distance
State
A NULL NULL Undiscovered
B NULL NULL Undiscovered
C NULL NULL Undiscovered
D NULL NULL Undiscovered
E NULL NULL Undiscovered
F NULL NULL Undiscovered
G NULL NULL Undiscovered
H NULL NULL Undiscovered
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
10
B
A
D
C
E
F
G
H
J
I
K
L
Queue
A
• Set state of A to Discovered_A • Set parent of A to null
Example 1
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_A
B NULL NULL Undiscovered
C NULL NULL Undiscovered
D NULL NULL Undiscovered
E NULL NULL Undiscovered
F NULL NULL Undiscovered
G NULL NULL Undiscovered
H NULL NULL Undiscovered
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
12
B
A
D
C
E
F
G
H
J
I
K
L
Queue
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
B
• Visit vertex B
• Add vertex B to the queue • Set parent of vertex B to A
Example 1
14
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_A
B A 1 Discovered_A
C NULL NULL Undiscovered
D NULL NULL Undiscovered
E NULL NULL Undiscovered
F NULL NULL Undiscovered
G NULL NULL Undiscovered
H NULL NULL Undiscovered
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
C B
• Visit vertex C
• Add vertex C to the queue • Set parent of vertex C to A
Example 1
16
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_A
B A 1 Discovered_A
C A 1 Discovered_A
D NULL NULL Undiscovered
E NULL NULL Undiscovered
F NULL NULL Undiscovered
G NULL NULL Undiscovered
H NULL NULL Undiscovered
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
D C B
• Visit vertex D
• Add vertex D to the queue • Set parent of vertex D to A
Example 1
18
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_A
B A 1 Discovered_A
C A 1 Discovered_A
D A 1 Discovered_A
E NULL NULL Undiscovered
F NULL NULL Undiscovered
G NULL NULL Undiscovered
H NULL NULL Undiscovered
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
D C B
Example 1
20
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_A
C A 1 Discovered_A
D A 1 Discovered_A
E NULL NULL Undiscovered
F NULL NULL Undiscovered
G NULL NULL Undiscovered
H NULL NULL Undiscovered
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
D C
Example 1
22
B
A
D
C
E
F
G
H
J
I
K
L
Queue
E D C
• Visit vertex E
• Add vertex E to the queue • Set parent of vertex E to B
• Set distance of vertex E to distance of B + 1
Example 1
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_A
C A 1 Discovered_A
D A 1 Discovered_A
E B 2 Discovered_A
F NULL NULL Undiscovered
G NULL NULL Undiscovered
H NULL NULL Undiscovered
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
24B
A
D
C
E
F
G
H
J
I
K
L
Queue
F E D C• Visit vertex F
• Add vertex F to the queue • Set parent of vertex F to B
• Set distance of vertex F to distance of B + 1
Example 1
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_A
C A 1 Discovered_A
D A 1 Discovered_A
E B 2 Discovered_A
F B 2 Discovered_A
G NULL NULL Undiscovered
H NULL NULL Undiscovered
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
26
B
A
D
C
E
F
G
H
J
I
K
L
Queue
F E D C
Example 1
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_A
D A 1 Discovered_A
E B 2 Discovered_A
F B 2 Discovered_A
G NULL NULL Undiscovered
H NULL NULL Undiscovered
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
28
B
A
D
C
E
F
G
H
J
I
K
L
Queue
F E D
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
F E D
• Visit vertex F
Example 1
30
B
A
D
C
E
F
G
H
J
I
K
L
Queue
F E D
Example 1
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_A
E B 2 Discovered_A
F B 2 Discovered_A
G NULL NULL Undiscovered
H NULL NULL Undiscovered
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
32
B
A
D
C
E
F
G
H
J
I
K
L
Queue
F E
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
G F E
• Visit vertex G
• Add vertex G to the queue • Set parent of vertex G to D
Example 1
34
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_A
E B 2 Discovered_A
F B 2 Discovered_A
G D 2 Discovered_A
H NULL NULL Undiscovered
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
H G F E
• Visit vertex H
• Add vertex H to the queue • Set parent of vertex H to D
Example 1
36
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_A
E B 2 Discovered_A
F B 2 Discovered_A
G D 2 Discovered_A
H D 2 Discovered_A
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
H G F E
Example 1
38
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_A
F B 2 Discovered_A
G D 2 Discovered_A
H D 2 Discovered_A
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
H G F
Example 1
40
B
A
D
C
E
F
G
H
J
I
K
L
Queue
H G F
Example 1
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_A
G D 2 Discovered_A
H D 2 Discovered_A
I NULL NULL Undiscovered
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
42
B
A
D
C
E
F
G
H
J
I
K
L
Queue
H G
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
I H G
• Visit vertex I
• Add vertex I to the queue • Set parent of vertex I to F
Example 1
44
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_A
G D 2 Discovered_A
H D 2 Discovered_A
I F 3 Discovered_A
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
I H G
Example 1
46
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_N
G D 2 Discovered_A
H D 2 Discovered_A
I I 3 Discovered_A
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
I H
Example 1
48
B
A
D
C
E
F
G
H
J
I
K
L
Queue
I H
• Visit vertex I
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
I H
Example 1
50
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_N
G D 2 Discovered_N
H D 2 Discovered_A
I F 3 Discovered_A
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
I
Example 1
52
B
A
D
C
E
F
G
H
J
I
K
L
Queue
I
Example 1
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_N
G D 2 Discovered_N
H D 2 Discovered_N
I F 3 Discovered_A
J NULL NULL Undiscovered
K NULL NULL Undiscovered
Example 1
54
B
A
D
C
E
F
G
H
J
I
K
L
Queue
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
J
• Visit vertex J
• Add vertex J to the queue • Set parent of vertex J to I
Example 1
56
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_N
G D 2 Discovered_N
H D 2 Discovered_N
I F 3 Discovered_A
J I 4 Discovered_A
K NULL NULL Undiscovered
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
K J
• Visit vertex K
• Add vertex K to the queue • Set parent of vertex K to I
Example 1
58
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_N
G D 2 Discovered_N
H D 2 Discovered_N
I F 3 Discovered_A
J I 4 Discovered_A
K I 4 Discovered_A
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
K J
Example 1
60
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_N
G D 2 Discovered_N
H D 2 Discovered_N
I F 3 Discovered_N
J I 4 Discovered_A
K I 4 Discovered_A
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
K
Example 1
62
B
A
D
C
E
F
G
H
J
I
K
L
Queue
K
Example 1
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_N
G D 2 Discovered_N
H D 2 Discovered_N
I F 3 Discovered_N
J I 4 Discovered_N
K I 4 Discovered_A
Example 1
64
B
A
D
C
E
F
G
H
J
I
K
L
Queue
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
L
• Visit vertex L
• Add vertex L to the queue • Set parent of vertex L to K
Example 1
66
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_N
G D 2 Discovered_N
H D 2 Discovered_N
I F 3 Discovered_N
J I 4 Discovered_N
K I 4 Discovered_A
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
L
Example 1
68
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_N
G D 2 Discovered_N
H D 2 Discovered_N
I F 3 Discovered_N
J I 4 Discovered_N
K I 4 Discovered_N
Example 1
B
A
D
C
E
F
G
H
J
I
K
L
Queue
Example 1
70
B
A
D
C
E
F
G
H
J
I
K
L
Queue
Example 1
Vertex
Parent
Vertex
From Source
Distance
State
A NULL 0 Discovered_N
B A 1 Discovered_N
C A 1 Discovered_N
D A 1 Discovered_N
E B 2 Discovered_N
F B 2 Discovered_N
G D 2 Discovered_N
H D 2 Discovered_N
I F 3 Discovered_N
J I 4 Discovered_N
K I 4 Discovered_N
Example 1
72
B
A
D
C
E
F
G
H
J
I
K
L
Queue
Time Analysis
•
O
(V + E)
–
E = edges
–
V = vertices
–
Visit all vertices and edges exactly once
–
Initial setup =
O
(V)
–
Dequeue =
O
(E)
Space Analysis
•
O
(V)
–
All vertices in queue in the worst case
Complete
•
Complete = the algorithm will always find the
solution if the solution exists
•
BFS is complete
Optimal
•
Optimal = always finds the optimal solution
•
BFS is optimal
–
See proof in book
–
Short answer = when vertex is first visited there is
no shorter path to that vertex
•
Parent vertex is saved