【BFS】LeetCode 130. Surrounded Regions

LeetCode 130. Surrounded Regions

Solution1:我的答案
利用bfs解决,超过98.7%的答案,还不错。关键是简单易懂!

class Solution {
public:
    void solve(vector<vector<char>>& board) {
        if (!board.size() || !board[0].size()) return;
        int m = board.size(), n = board[0].size();
        vector<vector<int> > mark(m, vector<int> (n, 0));
        for (int i = 0; i < n; i++) //首行
            if (board[0][i] == 'O')
                bfs(board, mark, 0, i);
        for (int i = 0; i < m; i++) //末列
            if (board[i][n - 1] == 'O')
                bfs(board, mark, i, n - 1);
        for (int i = 0; i < n; i++) //末行
            if (board[m - 1][i] == 'O')
                bfs(board, mark, m - 1, i);
        for (int i = 0; i < m; i++)  //首列
            if (board[i][0] == 'O')
                bfs(board, mark, i, 0);
        for (int i = 0; i < m; i++) 
            for (int j = 0; j < n; j++) 
                if (!mark[i][j])
                    board[i][j] = 'X';
        return;
    }

private:
    void bfs(vector<vector<char>>& board, vector<vector<int> >& mark, 
             int i, int j) {
        if (i < 0 || i >= board.size() || j < 0 || j >= board[0].size())
            return;
         else if (mark[i][j] || board[i][j] == 'X')
            return;
        else if (board[i][j] == 'O') {
            mark[i][j] = 1;
            bfs(board, mark, i, j + 1);
            bfs(board, mark, i, j - 1);
            bfs(board, mark, i - 1, j);
            bfs(board, mark, i + 1, j);
        }
    }
};

猜你喜欢

转载自blog.csdn.net/allenlzcoder/article/details/81093132