Given a 2D board containing ‘X’ and ‘O’ (the letter 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:
queue<pair<int,int>> q;
void bfs(int x, int y, vector<vector<char>>& board, int m, int n)
{
if(board[x][y] != 'O')
return;
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
q.push(make_pair(x, y));
board[x][y] = 'v';
while(!q.empty())
{
pair<int, int> p = q.front();
q.pop();
int xx = p.first;
int yy = p.second;
for(int i=0; i<4; i++)
{
int nx = xx + dx[i];
int ny = yy + dy[i];
if(nx >= 0 && ny >= 0 && nx < m && ny < n && board[nx][ny] == 'O')
{
board[nx][ny] = 'v';
q.push(make_pair(nx, ny));
}
}
}
}
void solve(vector<vector<char>>& board)
{
int m = board.size();
if(m <= 2)
return;
int n = board[0].size();
if(n <= 2)
return;
for(int i=0; i<m; i++)
{
bfs(i, 0, board, m, n);
bfs(i, n-1, board, m, n);
}
for(int j=1; j<n-1; j++)
{
bfs(0, j, board, m, n);
bfs(m-1, j, board, m, n);
}
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
if(board[i][j] == 'v')
board[i][j] = 'O';
else if(board[i][j] == 'O')
board[i][j] = 'X';
}
}
}
};