爽题一个 水一篇是一篇
这题巧妙一点是t
为1
时是太平洋,2
时是大西洋,用二进制表示
st[x][y]==3
时表示两个海都有交集符合题目要求
flood fill算法
class Solution {
public:
vector<vector<int>>st;
vector<vector<int>>w;
int n,m;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
void dfs(int x,int y,int t)
{
if(st[x][y]&t)return ;
st[x][y]|=t;
for(int i=0;i<4;i++)
{
int a=x+dx[i],b=y+dy[i];
if(a>=0&&a<n&&b>=0&&b<m&&w[a][b]>=w[x][y])
dfs(a,b,t);
}
}
vector<vector<int>> pacificAtlantic(vector<vector<int>>& h) {
n=h.size(),m=h[0].size();
w=h;
vector<vector<int>>res;
st=vector<vector<int>>(n,vector<int>(m,0));
for(int i=0;i<n;i++)dfs(i,0,1);
for(int i=0;i<m;i++)dfs(0,i,1);
for(int i=0;i<n;i++)dfs(i,m-1,2);
for(int i=0;i<m;i++)dfs(n-1,i,2);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(st[i][j]==3)
res.push_back({i,j});
}
}
return res;
}
};