https://leetcode.com/problems/surrounded-regions/
Given a 2D board containing 'X'
and '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
常規的一道dfs題。但是存在一個邊界問題
dfs時,對於邊界的判斷,開始時是i>0,j>0,i<m-1,j<n-1,這樣會導致超時,因爲四個邊界已經判斷過了沒必要再判斷
參考 https://leetcode.com/discuss/42445/a-really-simple-and-readable-c-solution%EF%BC%8Conly-cost-12ms
void dfs(vector<vector<char>>&board,int i,int j,int m,int n)
{
if(board[i][j]=='O')
{
board[i][j]='1';
if(i>1) dfs(board,i-1,j,m,n);
if(j>1) dfs(board,i,j-1,m,n);
if(i<m-2) dfs(board,i+1,j,m,n);
if(j<n-2) dfs(board,i,j+1,m,n);
}
}
void solve(vector<vector<char>>& board)
{
int i,j;
int row=board.size();
if(!row)
return;
int col=board[0].size();
for(i=0;i<row;i++)
{
dfs(board,i,0,row,col);
dfs(board,i,col-1,row,col);
}
for(j=1;j+1<col;j++)
{
dfs(board,0,j,row,col);
dfs(board,row-1,j,row,col);
}
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(board[i][j]=='O')
board[i][j]='X';
else if(board[i][j]=='1')
board[i][j]='O';
}
}
}