class Solution {
public:
/*
* @param board: board a 2D board containing 'X' and 'O'
* @return: nothing
*/
queue<int> qx;
queue<int> qy;
bool IsOcean(int i,int j,int m,int n,vector<vector<char>> &board)
{
if(i==0||i==m-1||j==0||j==n-1)
{
return board[i][j]=='O';
}
return false;
}
void Expand(int i,int j,int m,int n,vector<vector<char>> &board)
{
if(i>=0&&i<m&&j>=0&&j<n&&board[i][j]=='O')
{
board[i][j]='Y';
qx.push(i);
qy.push(j);
}
}
void BFS(int i,int j,int m,int n,vector<vector<char>> &board)
{
qx.push(i);
qy.push(j);
board[i][j]='Y';
while(!qx.empty()&&!qy.empty())
{
int x_temp=qx.front();
int y_temp=qy.front();
qx.pop();
qy.pop();
Expand(x_temp-1,y_temp,m,n,board);
Expand(x_temp+1,y_temp,m,n,board);
Expand(x_temp,y_temp-1,m,n,board);
Expand(x_temp,y_temp+1,m,n,board);
}
}
void surroundedRegions(vector<vector<char>> &board) {
// write your code here
if(board.size()==0||board[0].size()==0)
{
return;
}
int m=board.size();
int n=board[0].size();
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(IsOcean(i,j,m,n,board))
BFS(i,j,m,n,board);
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(board[i][j]=='O')
board[i][j]='X';
if(board[i][j]=='Y')
board[i][j]='O';
}
}
}
};
被围绕的区域
最新推荐文章于 2024-03-18 17:49:23 发布