Problem of the day
You have a 2D grid of ‘N’ rows and ‘M’ columns which are initially filled with water. You are given ‘Q’ queries each consisting of two integers ‘X’ and ‘Y’ and in each query operation, you have to turn the water at position (‘X’, ‘Y’) into a land. You are supposed to find the number of islands in the grid after each query.
An island is a group of lands surrounded by water horizontally, vertically, or diagonally.
The first line contains an integer ‘T’ denoting the number of test cases.
The first input line of each test case contains two single space-separated integers ‘N’ and ‘M’ representing the number of rows and columns of the grid, respectively.
The second line of each test case contains an integer ‘Q’ representing the number of queries.
Next ‘Q’ lines contain two single space-separated integers ‘X’ and ‘Y’, representing the coordinates of the grid i.e the coordinates of the point to be turned into land.
Output Format:
For each test case, print a single integer denoting the number of islands after each query operation.
Print the output of each test case in a separate line.
Note:
You are not required to print the expected output; it has already been taken care of. Just implement the given function.
1 <= T <= 5
1 <= N <= 1000
1 <= M <= 1000
1 <= Q <= 100000
0 <= X < N
0 <= Y < M
Time limit: 1 sec
2
3 3
4
0 0
0 1
1 2
2 1
4 5
4
1 1
0 1
3 3
3 4
1 1 2 3
1 1 2 2
In test case 1,
0. 000
000
000
1. 100
000
000
2. 110
000
000
3. 110
001
000
4. 110
001
100
So, the answer is 1, 1, 2, 3.
In test case 2,
0. 00000
00000
00000
00000
1. 00000
01000
00000
00000
2. 01000
01000
00000
00000
3. 01000
01000
00000
00010
4. 01000
01000
00000
00011
So, the answer is 1, 1, 2, 2.
2
2 2
2
0 0
1 1
1 1
1
0 0
1 2
1
In test case 1,
0. 00
00
1. 10
00
2. 10
01
So, the answer is 1, 2.
In test case 2,
0. 0
1. 1
So, the answer is 1.
Can you think of some brute force approach to find the islands connected to each other?
The idea here is to represent the grid as a graph and all the adjacent land cells are connected via an edge. Finally, do DFS on the grid and find the number of connected components after each query operation.
The algorithm is as follows:
O(Q * N * M), Where ‘Q’ is the number of queries, ‘N’ is the number of rows in the given grid, and ‘M’ is the number of columns.
Since for each query run a DFS on the grid to count the number of connected components which is of order N * M, So, the overall time complexity is O(Q * N * M).
O(N * M), Where ‘N’ is the number of rows in the given grid, and ‘M’ is the number of columns.
Since we are using two 2D matrices which are of order N * M. So, the overall space complexity is O(N * M).