被围绕的区域
class Solution {
public:
void DFS(vector<vector<char>>& board, int x, int y)//从边界处如果有O的话将它以及和他相关联的进行改变
{
int col = board.size();
int row = board[0].size();
board[x][y] = '#';
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,1,-1 };
for (int i = 0; i < 4; ++i)
{
int nx = x + dx[i];
int ny = y + dy[i];
if (nx < 0 || nx >= col || ny < 0 || ny >= row)
continue;
if (board[nx][ny] == 'O')
DFS(board, nx, ny);
}
}
void solve(vector<vector<char>>& board) {
//使用的方法是什么,看到这种题目想到的是回溯法
int col = board.size();
if(col==0)
return;
int row = board[0].size();
for (int i = 0; i<col; ++i)
{
for (int j = 0; j<row; ++j)
{
if ((i == 0 || i == col - 1 || j == 0 || j == row - 1) && board[i][j] == 'O')
{
DFS(board, i, j);
}
}
}
//将改变的之后的#变回之前的O
//之前的O都将改为X
for (int i = 0; i<col; ++i)
{
for (int j = 0; j<row; ++j)
{
if (board[i][j] == 'O')
board[i][j] = 'X';
if (board[i][j] == '#')
board[i][j] = 'O';
}
}
}
};