human
Solve in Python:
Given an N x N grid containing only values 0 and 1, where 0 represents water and 1 represents land, find a water cell such that its distance to the nearest land cell is maximized and return the distance.
The distance used in this problem is the Manhattan distance: the distance between two cells (x0, y0) and (x1, y1) is |x0 - x1| + |y0 - y1|.
If no land or water exists in the grid, return -1.
 
Example 1:

Input: [[1,0,1],[0,0,0],[1,0,1]]
Output: 2
Explanation: 
The cell (1, 1) is as far as possible from all the land with distance 2.

Example 2:

Input: [[1,0,0],[0,0,0],[0,0,0]]
Output: 4
Explanation: 
The cell (2, 2) is as far as possible from all the land with distance 4.

 
Note:

1 <= grid.length == grid[0].length <= 100
grid[i][j] is 0 or 1

Write me a Python program to find a water cell such that its distance to the nearest land cell is maximized and return the distance?
assistant
#Here is Python program to find a water cell such that its distance to the nearest land cell is maximized and return the distance.

class Solution:
    def maxDistance(self, grid: List[List[int]]) -> int:
        
        from collections import deque
        
        queue = deque()
        for i, row in enumerate(grid):
            for j, cell in enumerate(row):
                if cell == 1:
                    queue.append((i, j, None, None))
        
        dist = {}
        while queue:
            
            i, j, previ, prevj = queue.popleft()
            if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]):
                continue
            if (i, j) not in dist:
                dist[(i, j)] = 1 + dist.get((previ, prevj), -1)
                # if previ is None and prevj is None:
                #     dist[(i, j)] = 0
                # else:
                #     dist[(i, j)] = 1 + dist[(previ, prevj)]
                for di, dj in [(1, 0), (0, 1), (-1, 0), (0, -1)]:
                    newi, newj = i +di, j + dj
                    queue.append((newi, newj, i, j))
        
        ans = max(list(dist.values()), default=-1)
        return ans if ans != 0 else -1