程式語言 - LeetCode - C++ - 130. Surrounded Regions



參考資訊:
https://www.cnblogs.com/grandyang/p/4555831.html

題目:


方法:

跟邊邊連通的,都是要保留的,其餘轉成'X'即可

解答:

class Solution {
public:
    void solve(vector<vector<char>>& board) {
        int m = board.size();
        int n = board[0].size();

        auto dfs = [&](this auto&& dfs, int i, int j) -> void {
            if (i < 0 || i >= m || j < 0 || j >= n) {
                return;
            }
            if (board[i][j] != 'O') {
                return;
            }

            board[i][j] = '#';
            dfs(i + 1, j);
            dfs(i - 1, j);
            dfs(i, j + 1);
            dfs(i, j - 1);
        };

        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if ((i == 0 || i == m - 1 || j == 0 || j == n - 1) && 
                    board[i][j] == 'O')
                {
                    dfs(i, j);
                }
            }
        }
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (board[i][j] == 'O') {
                    board[i][j] = 'X';
                }
                if (board[i][j] == '#') {
                    board[i][j] = 'O';
                }
            }
        }
    }
};