1const moves = [2[1, 0],3[0, 1],4[-1, 0],5[0, -1],6];78var swimInWater = function (grid) {9let pq = new MinPriorityQueue(),10N = grid.length - 1,11ans = grid[0][0],12i = 0,13j = 0;14while (i < N || j < N) {15for (let [a, b] of moves) {16let ia = i + a,17jb = j + b;18if (ia < 0 || ia > N || jb < 0 || jb > N || grid[ia][jb] > 2500) continue;19pq.enqueue((grid[ia][jb] << 12) + (ia << 6) + jb);20grid[ia][jb] = 3000;21}22let next = pq.dequeue().element;23ans = Math.max(ans, next >> 12);24i = (next >> 6) & ((1 << 6) - 1);25j = next & ((1 << 6) - 1);26}27return ans;28};