C++ | Leetcode C++题解之第130题被围绕的区域

题目:

题解:

cpp 复制代码
class Solution {
public:
    const int dx[4] = {1, -1, 0, 0};
    const int dy[4] = {0, 0, 1, -1};

    void solve(vector<vector<char>>& board) {
        int n = board.size();
        if (n == 0) {
            return;
        }
        int m = board[0].size();
        queue<pair<int, int>> que;
        for (int i = 0; i < n; i++) {
            if (board[i][0] == 'O') {
                que.emplace(i, 0);
                board[i][0] = 'A';
            }
            if (board[i][m - 1] == 'O') {
                que.emplace(i, m - 1);
                board[i][m - 1] = 'A';
            }
        }
        for (int i = 1; i < m - 1; i++) {
            if (board[0][i] == 'O') {
                que.emplace(0, i);
                board[0][i] = 'A';
            }
            if (board[n - 1][i] == 'O') {
                que.emplace(n - 1, i);
                board[n - 1][i] = 'A';
            }
        }
        while (!que.empty()) {
            int x = que.front().first, y = que.front().second;
            que.pop();
            for (int i = 0; i < 4; i++) {
                int mx = x + dx[i], my = y + dy[i];
                if (mx < 0 || my < 0 || mx >= n || my >= m || board[mx][my] != 'O') {
                    continue;
                }
                que.emplace(mx, my);
                board[mx][my] = 'A';
            }
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (board[i][j] == 'A') {
                    board[i][j] = 'O';
                } else if (board[i][j] == 'O') {
                    board[i][j] = 'X';
                }
            }
        }
    }
};
相关推荐
xu_yule3 分钟前
算法基础(背包问题)-完全背包
c++·算法·动态规划·完全背包
gfdhy7 分钟前
【c++】素数详解:概念、定义及高效实现(判断方法 + 筛法)
开发语言·c++·算法·数学建模·ai编程
Swift社区11 分钟前
LeetCode 452 - 用最少数量的箭引爆气球
算法·leetcode·职场和发展
lzh2004091914 分钟前
Set 和 Map 深入详解及其区别
数据结构·c++
SmoothSailingT24 分钟前
C/C++——结构体(Struct)
开发语言·c++·结构体·struct
Lucis__26 分钟前
红黑树实现—规则&约束的平衡之道
数据结构·c++·算法·红黑树
yaoh.wang29 分钟前
力扣(LeetCode) 70: 爬楼梯 - 解法思路
python·算法·leetcode·面试·职场和发展·动态规划·递归
名誉寒冰37 分钟前
深入理解fd_set:从基础到实战应用(Linux/C++)
java·linux·c++
Learner__Q41 分钟前
每天五分钟:二分查找-LeetCode高频题解析_day4
python·算法·leetcode
智者知已应修善业43 分钟前
【字符串提取3个整数求和】2024-2-11
c语言·c++·经验分享·笔记·算法