Nptel Week3 Module3 Bfs
Nptel Week3 Module3 Bfs
Week 3, Module 3
Set of vertices V
Set of edges E
Directed graph:
v0 is source
v1
Each (vi,vi+1) v3
is an edge in
E
v2 v4
vk is target
v5
Adjacency matrix
1
1 2 3 4 5 6 7 8 9 10
3 1 0 1 1 1 0 0 0 0 0 0
2 1 0 1 0 0 0 0 0 0 0
2 5 3 1 1 0 0 0 0 0 0 0 0
4 1 0 0 0 1 0 0 1 0 0
4 5 0 0 0 1 0 1 1 0 0 0
6 7 6 0 0 0 0 1 0 1 1 1 0
7 0 0 0 0 1 1 0 0 0 0
8 0 0 0 1 0 1 0 0 1 0
8 9 9 0 0 0 0 0 1 0 1 0 1
10 0 0 0 0 0 0 0 0 1 0
10
Adjacency list
For each vertex, maintain a
1 list of its neighbours
3 1 2,3,4
2 1,3
2 5 3 1,2
4 1,5,8
4 5 4,6,7
6 7 6 5,7,8,9
7 5,6
8 9 8 4,6,9
9 6,8,10
10 10 9
Finding a path
Queue
8 9
10
Breadth first search 1
2
1 3
4
5
3 Visited
6
2 5 7
8
4 9
6 7 10
Queue
8 9
10 head tail
Breadth first search 1
2
1
1 3
4
5
3 Visited
6
2 5 7
8
4 9
6 7 10
Queue
8 9
1
10
Breadth first search 1
2
1
1 3
4
5
3 Visited
6
2 5 7
8
4 9
6 7 10
Queue
8 9
10
Breadth first search 1
2
1
1
1 3
4
5
3 Visited
6
2 5 7
8
4 9
6 7 10
Queue
8 9
2
10
Breadth first search 1
2
1
1
1 3 1
4
5
3 Visited
6
2 5 7
8
4 9
6 7 10
Queue
8 9
2 3
10
Breadth first search 1
2
1
1
1 3 1
4 1
5
3 Visited
6
2 5 7
8
4 9
6 7 10
Queue
8 9
2 3 4
10
Breadth first search 1
2
1
1
1 3 1
4 1
5
3 Visited
6
2 5 7
8
4 9
6 7 10
Queue
8 9
3 4
10
Breadth first search 1
2
1
1
1 3 1
4 1
5
3 Visited
6
2 5 7
8
4 9
6 7 10
Queue
8 9
4
10
Breadth first search 1
2
1
1
1 3 1
4 1
5
3 Visited
6
2 5 7
8
4 9
6 7 10
Queue
8 9
10
Breadth first search 1
2
1
1
1 3 1
4 1
3 Visited 5 1
6
2 5 7
8
4 9
6 7 10
Queue
8 9
5
10
Breadth first search 1
2
1
1
1 3 1
4 1
3 Visited 5 1
6
2 5 7
8 1
4 9
6 7 10
Queue
8 9
5 8
10
Breadth first search 1
2
1
1
1 3 1
4 1
3 Visited 5 1
6
2 5 7
8 1
4 9
6 7 10
Queue
8 9
8
10
Breadth first search 1
2
1
1
1 3 1
4 1
3 Visited 5 1
6 1
2 5 7
8 1
4 9
6 7 10
Queue
8 9
8 6
10
Breadth first search 1
2
1
1
1 3 1
4 1
3 Visited 5 1
6 1
2 5 7 1
8 1
4 9
6 7 10
Queue
8 9
8 6 7
10
Breadth first search 1
2
1
1
1 3 1
4 1
3 Visited 5 1
6 1
2 5 7 1
8 1
4 9
6 7 10
Queue
8 9
6 7
10
Breadth first search 1
2
1
1
1 3 1
4 1
3 Visited 5 1
6 1
2 5 7 1
8 1
4 9 1
6 7 10
Queue
8 9
6 7 9
10
Breadth first search 1
2
1
1
1 3 1
4 1
3 Visited 5 1
6 1
2 5 7 1
8 1
4 9 1
6 7 10
Queue
8 9
7 9
10
Breadth first search 1
2
1
1
1 3 1
4 1
3 Visited 5 1
6 1
2 5 7 1
8 1
4 9 1
6 7 10
Queue
8 9
9
10
Breadth first search 1
2
1
1
1 3 1
4 1
3 Visited 5 1
6 1
2 5 7 1
8 1
4 9 1
6 7 10
Queue
8 9
10
Breadth first search 1
2 1
1
1 3 1
4 1
5 1
3 Visited
6 1
2 5 7 1
8 1
4 9 1
6 7 10 1
Queue
8 9
10
10
Breadth first search 1
2 1
1
1 3 1
4 1
5 1
3 Visited
6 1
2 5 7 1
8 1
4 9 1
6 7 10 1
Queue
8 9
10
Breadth first search
function BFS(i) // BFS starting from vertex i
//Initialization
for j = 1..n {visited[j] = 0}; Q = []
Overall, O(n+m)
Complexity of BFS
//Initialization
for j = 1..n {visited[j] = 0; parent[j] = -1}
Q = []
level[j] = -1 initially
//Initialization
for j = 1..n {level[j] = -1; parent[j] = -1}
Q = []
Queue
8 9
10
L P
Breadth first search 1
2
1 L : Level 3
P : Parent 4
5
3
6
2 5 7
8
4 9
6 7 10
Queue
8 9
10 head tail
L P
Breadth first search 1
2
0 -
1 L : Level 3
P : Parent 4
5
3
6
2 5 7
8
4 9
6 7 10
Queue
8 9
1
10
L P
Breadth first search 1
2
0 -
1 L : Level 3
P : Parent 4
5
3
6
2 5 7
8
4 9
6 7 10
Queue
8 9
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3
P : Parent 4
5
3
6
2 5 7
8
4 9
6 7 10
Queue
8 9
2
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4
5
3
6
2 5 7
8
4 9
6 7 10
Queue
8 9
2 3
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
5
3
6
2 5 7
8
4 9
6 7 10
Queue
8 9
2 3 4
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
5
3
6
2 5 7
8
4 9
6 7 10
Queue
8 9
3 4
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
5
3
6
2 5 7
8
4 9
6 7 10
Queue
8 9
4
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
5
3
6
2 5 7
8
4 9
6 7 10
Queue
8 9
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6
2 5 7
8
4 9
6 7 10
Queue
8 9
5
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6
2 5 7
8 2 4
4 9
6 7 10
Queue
8 9
5 8
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6
2 5 7
8 2 4
4 9
6 7 10
Queue
8 9
8
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6 3 5
2 5 7
8 2 4
4 9
6 7 10
Queue
8 9
8 6
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6 3 5
2 5 7 3 5
8 2 4
4 9
6 7 10
Queue
8 9
8 6 7
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6 3 5
2 5 7 3 5
8 2 4
4 9
6 7 10
Queue
8 9
6 7
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6 3 5
2 5 7 3 5
8 2 4
4 9 3 8
6 7 10
Queue
8 9
6 7 9
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6 3 5
2 5 7 3 5
8 2 4
4 9 3 8
6 7 10
Queue
8 9
7 9
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6 3 5
2 5 7 3 5
8 2 4
4 9 3 8
6 7 10
Queue
8 9
9
10
L P
Breadth first search 1
2
0
1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6 3 5
2 5 7 3 5
8 2 4
4 9 3 8
6 7 10
Queue
8 9
10
L P
Breadth first search 1 0
2 1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6 3 5
2 5 7 3 5
8 2 4
4 9 3 8
6 7 10 4 9
Queue
8 9
10
10
L P
Breadth first search 1 0
2 1
-
1
1 L : Level 3 1 1
P : Parent 4 1 1
3 5 2 4
6 3 5
2 5 7 3 5
8 2 4
4 9 3 8
6 7 10 4 9
Queue
8 9
10
Recording distances
BFS with level[ ] gives us the shortest path to each
node in terms of number of edges