You are given a binary square matrix ‘ARR’ with N rows and N columns, in which 0 represents the water and 1 represents the land.
You have to find a water cell such that its distance to the nearest land cell is maximized and print the maximum distance.
Note :
The distance between any two cells (x0, y0) and (x1, y1) is given by the Manhattan distance: |x0 - x1| + |y0 - y1|.
If no land or water exists in the grid, then return -1.
The first line of input contains an integer ‘T' representing the number of test cases.
The first line of each test case contains one integer ‘N’ denoting the size of the matrix.
The next ‘N’ lines contain ‘N’ integers separated by spaces describing rows of matrix ‘ARR’ (each element of ‘ARR’ is either 0 or 1).
Output Format :
For each test case, on a separate line, output one integer - the largest distance from a water cell to the nearest land cell.
Note :
You do not need to print anything. It has already been taken care of. Just implement the given function.
1 <= T <= 5
1 <= N <= 10^3
ARR[i][j] = 0 or 1
Time limit: 1 sec
2
3
1 0 1
0 0 0
1 0 1
3
1 0 0
0 0 0
0 0 0
2
4
For the first test case, The cell (1, 1) is as far as possible from all the land with distance 2.
For the second test case, The cell (2, 2) is as far as possible from all the land with distance 4.
2
3
1 0 1
0 1 0
1 0 1
2
1 1
1 1
1
-1
Can you try all possible distances from each land cell?
The idea here is to calculate the distance from each land cell and update every water cell to the minimum distance via any land cell.
We declare a 2d matrix minDistance[][] initially set to Infinity, and then run BFS from every land cell and calculate the shortest distance to each water cell, and update the minDistance[][] to the minimum shortest distance to a water cell. The maximum value which is not equal to infinity, of the water cell in minDistance[][] will be our ans.
The algorithm is as follows:
O(N^4), where N is the size of the matrix.
Since we are running BFS for every land cell, which is of order N^4 because in the worst case all the cells can be land, and we end up doing BFS for every cell. Hence, the overall time complexity is O(N^4).
O(N^2), where N is the size of the matrix.
Since we are using an auxiliary matrix distance[][] and minDistance[][], which is of order N^2. So, the overall space complexity is O(N^2).