leetcode417
最近写dfs的题很折磨,别人的题解得看半天,自己有没有什么具体的想法, 总之继续做吧
从四条边上的点展开,寻找能到临近海洋的点。
class Solution {
public:
vector<int>dir{1,0,-1,0,1};
void dfs(vector<vector<int>>& heights,vector<vector<bool>>&map,int r,int c)
{
if(map[r][c]) return;
map[r][c]=true;
int x,y;
for(int i=0;i!=4;++i)
{
x=r+dir[i],y=c+dir[i+1];
if(x>=0&&x<heights.size()&&y>=0&&y<heights[0].size()&&heights[r][c]<=heights[x][y])
{
dfs(heights,map,x,y);
}
}
}
vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {
vector<vector<int>>ret;
int m=heights.size(),n=heights[0].size();
if(!m||!n) return {};
vector<vector<bool>>arrivep(m,vector<bool>(n,false));
vector<vector<bool>>arrivea(m,vector<bool>(n,false));
for(int i=0;i!=m;++i)
{
dfs(heights,arrivep,i,0);
dfs(heights,arrivea,i,n-1);
}
for(int i=0;i!=n;++i)
{
dfs(heights,arrivep,0,i);
dfs(heights,arrivea,m-1,i);
}
for(int i=0;i!=m;++i)
{
for(int j=0;j!=n;++j)
{
if(arrivep[i][j]&&arrivea[i][j])
{
ret.push_back(vector<int>{i,j});
}
}
}
return ret;
}
};
END