classSolution{public:intswimInWater(vector<vector<int>>&grid){constintn=grid.size();constvector<int>dirs{0,1,0,-1,0};intans=grid[0][0];usingT=tuple<int,int,int>;// (grid[i][j], i, j)priority_queue<T,vector<T>,greater<>>minHeap;vector<vector<bool>>seen(n,vector<bool>(n));minHeap.emplace(grid[0][0],0,0);seen[0][0]=true;while(!minHeap.empty()){constauto[height,i,j]=minHeap.top();minHeap.pop();ans=max(ans,height);if(i==n-1&&j==n-1)break;for(intk=0;k<4;++k){constintx=i+dirs[k];constinty=j+dirs[k+1];if(x<0||x==n||y<0||y==n)continue;if(seen[x][y])continue;minHeap.emplace(grid[x][y],x,y);seen[x][y]=true;}}returnans;}};
classSolution{publicintswimInWater(int[][]grid){finalintn=grid.length;finalint[]dirs={0,1,0,-1,0};intans=grid[0][0];// (grid[i][j], i, j)Queue<int[]>minHeap=newPriorityQueue<>((a,b)->a[0]-b[0]);boolean[][]seen=newboolean[n][n];minHeap.offer(newint[]{grid[0][0],0,0});seen[0][0]=true;while(!minHeap.isEmpty()){finalintheight=minHeap.peek()[0];finalinti=minHeap.peek()[1];finalintj=minHeap.poll()[2];ans=Math.max(ans,height);if(i==n-1&&j==n-1)break;for(intk=0;k<4;++k){finalintx=i+dirs[k];finalinty=j+dirs[k+1];if(x<0||x==n||y<0||y==n)continue;if(seen[x][y])continue;minHeap.offer(newint[]{grid[x][y],x,y});seen[x][y]=true;}}returnans;}}