原题链接:Leecode 417. 太平洋大西洋水流问题
从太平洋和大西洋各自遍历,重合的点即为答案。
class Solution {
public:
vector<vector<int>> P,A,res;
void dfs(vector<vector<int>>& heights,vector<vector<int>>& vis,int i,int j)
{
int m=heights.size(),n=heights[0].size();
if(vis[i][j]) return ;
vis[i][j]=1;
if(P[i][j] && A[i][j]) res.push_back({i,j});
if(i && heights[i-1][j]>=heights[i][j]) dfs(heights,vis,i-1,j);
if(i+1<m && heights[i+1][j]>=heights[i][j]) dfs(heights,vis,i+1,j);
if(j && heights[i][j-1]>=heights[i][j]) dfs(heights,vis,i,j-1);
if(j+1<n && heights[i][j+1]>=heights[i][j]) dfs(heights,vis,i,j+1);
}
vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {
int m=heights.size(),n=heights[0].size();
P=A=vector<vector<int>>(m,vector<int>(n));
for(int j=0;j<n;j++)
{
dfs(heights,P,0,j);
dfs(heights,A,m-1,j);
}
for(int i=0;i<m;i++)
{
dfs(heights,P,i,0);
dfs(heights,A,i,n-1);
}
return res;
}
};