先按照四周dfs进去,标记不应该修改为X的O,再全部遍历一次
class Solution {
public:
void solve(vector<vector<char>> &board) {
if(board.size()==0)return;
int row=board.size(),col=board[0].size();
for(int i=0;i<col;i++)dfs(board,row,col,0,i);
for(int j=0;j<row;j++)dfs(board,row,col,j,col-1);
for(int i=col-1;i>=0;i--)dfs(board,row,col,row-1,i);
for(int j=row-1;j>=0;j--)dfs(board,row,col,j,0);
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
{
if(board[i][j]=='O')board[i][j]='X';
if(board[i][j]=='a')board[i][j]='O';
}
}
void dfs(vector<vector<char>>&board,int row,int col,int x,int y)
{
if(x<0||y<0||x>=row||y>=col)return;
if(board[x][y]=='O'){
board[x][y]='a';
for(int i=0;i<4;i++)
{
int nextx=x+X[i],nexty=y+Y[i];
if(nextx>=0&&nexty>=0&&nextx<row&&nexty<col&&board[nextx][nexty]=='O')
dfs(board,row,col,nextx,nexty);
}
}
}
private:
int X[4]={0,0,1,-1};
int Y[4]={1,-1,0,0};
};
网友评论