417. Pacific Atlantic Water Flow

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);
        }
    }
};

猜你喜欢

转载自www.cnblogs.com/JTechRoad/p/9019892.html