struct point {
int x;
int y;
void operator= (const point& other) {
x = other.x;
y = other.y;
}
};
class Solution {
public:
void solve(vector<vector<char>>& board) {
if (board.empty())
{
return;
}
queue<point> nextTarget;
for (int i = 0;i < board.size();i++)
{
for (int j = 0;j < board[0].size();j++)
{
if (i == 0 || i == board.size() - 1 || j == 0 || j == board[0].size() - 1)
{
if (board[i][j] == 'O')
{
board[i][j] = 'L';
if (i - 1 >= 0 && board[i-1][j] == 'O')
{
point newTarget;
newTarget.x = i - 1;
newTarget.y = j;
nextTarget.push(newTarget);
board[i - 1][j] = 'L';
}
if (i + 1 < board.size() && board[i+1][j] == 'O')
{
point newTarget;
newTarget.x = i + 1;
newTarget.y = j;
nextTarget.push(newTarget);
board[i + 1][j] = 'L';
}
if (j - 1 >0 && board[i][j-1] == 'O')
{
point newTarget;
newTarget.x = i;
newTarget.y = j - 1;
nextTarget.push(newTarget);
board[i][j-1] = 'L';
}
if (j + 1 < board[0].size() && board[i][j+1] == 'O')
{
point newTarget;
newTarget.x = i;
newTarget.y = j + 1;
nextTarget.push(newTarget);
board[i][j + 1] = 'L';
}
while (!nextTarget.empty())
{
point next = nextTarget.front();
nextTarget.pop();
board[next.x][next.y] = 'L';
if (next.x - 1 >= 0 && board[next.x-1][next.y] == 'O')
{
point newTarget;
newTarget.x = next.x - 1;
newTarget.y = next.y;
nextTarget.push(newTarget);
board[next.x - 1][next.y] = 'L';
}
if (next.x + 1 < board.size() && board[next.x + 1][next.y] == 'O')
{
point newTarget;
newTarget.x = next.x + 1;
newTarget.y = next.y;
nextTarget.push(newTarget);
board[next.x + 1][next.y] = 'L';
}
if (next.y - 1 > 0 && board[next.x][next.y-1] == 'O')
{
point newTarget;
newTarget.x = next.x;
newTarget.y = next.y-1;
nextTarget.push(newTarget);
board[next.x][next.y - 1] = 'L';
}
if (next.y+1< board[0].size() && board[next.x][next.y+1] == 'O')
{
point newTarget;
newTarget.x = next.x;
newTarget.y = next.y+1;
nextTarget.push(newTarget);
board[next.x][next.y + 1] = 'L';
}
}
}
}
}
}
for (int i = 0;i < board.size();i++)
{
for (int j = 0;j < board[0].size();j++)
{
if (board[i][j] == 'O')
{
board[i][j] = 'X';
}
else if (board[i][j] == 'L')
{
board[i][j] = 'O';
}
}
}
return;
}
};