https://leetcode.com/problems/pacific-atlantic-water-flow/description/
class Solution { public: vector<pair<int, int>> pacificAtlantic(vector<vector<int>>& matrix) { vector<pair<int,int>> res; int m = matrix.size(); if (m == 0) return res; int n = matrix[0].size(); vector<vector<int>> visited(m, vector<int>(n, 0)); for (int i = 0; i < m; i++) dfs(matrix, visited, 1, i, 0); for (int j = 0; j < n; j++) dfs(matrix, visited, 1, 0, j); for (int i = 0; i < m; i++) dfs(matrix, visited, 2, i, n-1); for (int j = 0; j < n; j++) dfs(matrix, visited, 2, m-1, j); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) if (visited[i][j] == 3) res.push_back({ i, j }); return res; } void dfs(vector<vector<int>>& matrix, vector<vector<int>>& visited, int mark, int i, int j) { if (visited[i][j] & mark) return; visited[i][j] |= mark; int m = matrix.size(), n = matrix[0].size(); int dirs[] = { -1, 0, 1, 0, -1 }; for (int d = 0; d < 4; d++) { int x = i + dirs[d]; int y = j + dirs[d+1]; if (x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] >= matrix[i][j]) dfs(matrix, visited, mark, x, y); } } };