# 1765. Map of Highest Peak

```
T: O(mn)
S:O(2m+2n result mn) 
```

````java
```java
class Solution {
    class Step {
        int x;
        int y;
        int level;
        Step(int x, int y, int level) {
            this.x = x;
            this.y = y;
            this.level = level;
        }
    }
    private static final int[][] DIRS = {{0,1}, {1,0}, {0,-1}, {-1,0}};
    public int[][] highestPeak(int[][] isWater) {
        int m = isWater.length;
        int n = isWater[0].length;
        int[][] result = new int[m][n];
        for (int i = 0; i < m; i++) {
            Arrays.fill(result[i], -1); // means not visited
        }

        Queue<Step> queue = new LinkedList<>();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (isWater[i][j] == 1) {
                    queue.offer(new Step(i, j, 0));
                }
            }
        }

        while (!queue.isEmpty()) {
            Step cur = queue.poll();
            if (result[cur.x][cur.y] != -1) {
                continue;
            } 
            result[cur.x][cur.y] = cur.level;
            
            for (int[] dir : DIRS) {
                int x = cur.x + dir[0];
                int y = cur.y + dir[1];
                if (x < 0 || x >= m || y < 0 || y >= n) {
                    continue;
                }
                queue.offer(new Step(x, y, cur.level+1));
            }
        }
        return result;
    }
}

/*
use BFS from water
fill out level to cells -> it's the ans

T: O(mn)
S:O(2m+2n result mn) // no need visited, use -1 to check

every time we go 4 dirs, so it can expand normally

考慮是不是需要用 visited
本題可用可不用, 反正結果是獨立一個空間出來的
*/
```
````
