老师,可以帮忙看看代码问题吗?我感觉思路没有问题,但是过不了。
我的思路:遍历每一个点,对每一个点都进行dfs,如果a 和 b都是true,说明两个海洋都可以流入。。。。
class Solution {
public:
int idx[4] = {-1, 0, 1, 0};
int idy[4] = {0, 1, 0, -1};
vector<vector<bool>> book; //记录某个结点是否遍历过
int n; //点数
bool a = false, b = false; // 是否可流入pacific, 是否流入atlantic
void dfs(vector<vector<int>>& heights, int x, int y) {
book[x][y] = true;
for(int i = 0; i < 4; i++) {
int newx = idx[i] + x, newy = idy[i] + y;
if(newx < 0 || newy < 0){ a = true; continue; }//进入了pacific
if(newx >= n || newy >= n){ b = true; continue; }//进入入了atlantic
if(heights[x][y] > heights[newx][newy] && !book[newx][newy])
dfs(heights, newx, newy);
}
book[x][y] = false;
}
vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {
//数组的初始化
n = heights.size();
book = vector<vector<bool>>(n, vector<bool>(n, false));
vector<vector<int>> res;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++){
dfs(heights, i, j);
if(a && b) res.push_back( {i, j} );
a = b = false;
}
return res;
}
};