1.417. 太平洋大西洋水流问题 - 力扣(LeetCode)
2.此处也运用了正难则反的思想,只找水可以最高到哪里
class Solution {
public:
vector<vector<int>>ret;
vector<vector<int>>p;
vector<vector<int>>a;
int m;
int n;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void dfs(vector<vector<int>>&heights,vector<vector<int>>&visit,int i,int j )
{
if(visit[i][j])
{
return;
}
visit[i][j]=1;
if(p[i][j]&&a[i][j])
{
ret.push_back({i,j});
}
for(int k=0;k<4;k++)
{
int x=i+dx[k];
int y=j+dy[k];
if(x>=0&&x<m&&y>=0&&y<n&&heights[x][y]>=heights[i][j])
{
dfs(heights,visit,x,y);
}
}
}
vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {
m=heights.size();
n=heights[0].size();
p=a=vector<vector<int>>(m,vector(n,0));
for(int i=0;i<m;i++)
{
dfs(heights,p,i,0);
dfs(heights,a,i,n-1);
}
for(int j=0;j<n;j++)
{
dfs(heights,p,0,j);
dfs(heights,a,m-1,j);
}
return ret;
}
};