3
void dfs(vector<vector<int>> &heights, vector<vector<bool>> &v, int i, int j) {4
int m = heights.size();5
int n = heights[0].size();7
if (i - 1 >= 0 && v[i - 1][j] != true && heights[i - 1][j] >= heights[i][j]) {8
dfs(heights, v, i - 1, j);10
if (i + 1 < m && v[i + 1][j] != true && heights[i + 1][j] >= heights[i][j]) {11
dfs(heights, v, i + 1, j);13
if (j - 1 >= 0 && v[i][j - 1] != true && heights[i][j - 1] >= heights[i][j]) {14
dfs(heights, v, i, j - 1);16
if (j + 1 < n && v[i][j + 1] != true && heights[i][j + 1] >= heights[i][j]) {17
dfs(heights, v, i, j + 1);20
vector<vector<int>> pacificAtlantic(vector<vector<int>> &heights) {21
int m = heights.size();22
vector<vector<int>> ans;26
int n = heights[0].size();30
vector<vector<bool>> pa(m, vector<bool>(n));31
vector<vector<bool>> at(m, vector<bool>(n));32
for (int i = 0; i < m; i++) {33
dfs(heights, pa, i, 0);34
dfs(heights, at, i, n - 1);36
for (int j = 0; j < n; j++) {37
dfs(heights, pa, 0, j);38
dfs(heights, at, m - 1, j);40
for (int i = 0; i < m; i++) {42
for (int j = 0; j < n; j++) {43
if (pa[i][j] && at[i][j]) {