Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.
A region is captured by flipping all 'O's into 'X's in that surrounded region .
For example,
X X X X
X O O X
X X O X
X O X X
After running your function, the board should be:
X X X X
X X X X
X X X X
X O X X
class Solution {
public:
void solve(vector<vector<char>> &board) {
if(board.size() == 0) return;
int m = board.size(), n = board[0].size();
for(int i = 0; i < m; ++i) {
bfs(i, 0, board);
bfs(i, n-1, board);
}
for(int j = 1; j < n-1; ++j) {
bfs(0, j, board);
bfs(m-1, j, board);
}
for(int i = 0; i < n; ++i) {
for(int j = 0; j < n; ++j) {
if(board[i][j] == 'O') board[i][j] = 'X';
else if(board[i][j] == '+') board[i][j] = 'O';
}
}
}
void bfs(int i, int j, vector<vector<char> > &board) {
queue<int> q;
visit(i, j, q, board);
int n = board[0].size();
while(!q.empty()) {
int f = q.front();
q.pop();
int r = f / n;
int l = f % n;
visit(r-1, l, q, board);
visit(r+1, l, q, board);
visit(r, l-1, q, board);
visit(r, l+1, q, board);
}
}
void visit(int i, int j, queue<int> &q, vector<vector<char> > &board) {
int m = board.size(), n = board[0].size();
if(i < 0 || i >= m || j < 0 || j >= n || board[i][j] != 'O') return;
board[i][j] = '+';
q.push(i * n + j);
}
};
欢迎关注微信公众号——计算机视觉:

本文介绍了一种算法,用于在二维棋盘上找到并标记被X包围的O字符区域。通过广度优先搜索(BFS),算法能够捕捉并翻转这些区域中的所有O字符为X,实现对特定区域的精确控制。
517

被折叠的 条评论
为什么被折叠?



