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不太满足要求,但BFS搜索容易给出错误判断,所以先BFS,再DFS,queue和auto什么的不会用,同样懒得去用的可以看看
<ol><li><span style="font-family: Arial, Helvetica, sans-serif;">class Solution {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">public:</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> void solve(vector> &board)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> //BFS</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> if(board.size()<3) return;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> int i=0,j=0,k=0;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> int bottom_idx = board.size()-1;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;"> while(k<(min(board.size(),board[0].size())+1)/2 )//</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> //top</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> Conti=true;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> for(i = k; i < board[k].size()-k; i ++)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>ChangeAble(board,k, i);</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span><span style="white-space:pre"> </span> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"> </span> //bottom</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> for(i = k; i < board[bottom_idx-k].size()-k; i ++)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> <span style="white-space: pre; background-color: rgb(240, 240, 240);">ChangeAble(board,bottom_idx-k, i)</span></span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> </span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> for(i = k; i < bottom_idx - k; i++)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span><span style="white-space: pre; background-color: rgb(240, 240, 240);">ChangeAble(board,i, k);</span></span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span><span style="white-space:pre"> </span> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> //right</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span>for(i = k;i <bottom_idx - k; i++)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"> </span>{</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span><span style="white-space: pre; background-color: rgb(240, 240, 240);">ChangeAble(board,i, board[i].size()- k-1);</span></span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> <span style="white-space:pre"> </span>k++;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> //DFS</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> for(i=0;i</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> for(j=0;j</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> if(board[i][j]=='1') test1(board,i,j);</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;"> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> for(i=0;i<board.size();i++)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> for(j=0;j<board[i].size();j++)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> if(board[i][j]=='O') board[i][j]='X';</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> else if(board[i][j]=='1') board[i][j]='O';</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> </span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> </span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> </span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> bool ChangeAble(vector> &board,int x,int y)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"> </span>// BFS</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> if(board[x][y]=='X') return ;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> if(board[x][y]=='O'&&(x==0||y==0||x==board.size()-1||y==board[x].size()-1)||</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> y>=board[x-1].size()||y>=board[x+1].size()){ board[x][y]='1'; return ;}</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> if(board[x][y]=='O'&& (board[x-1][y]=='1'||board[x+1][y]=='1'||board[x][y-1]=='1'||board[x][y+1]=='1'))</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {board[x][y]='1';return ;}</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> </span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> void test1(vector> &board,int x,int y)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> //DFS</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> if(x>0 && board[x-1][y] == 'O') </span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {board[x-1][y] ='1'; test1(board, x-1, y); }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> if(y>0 && board[x][y-1] == 'O') </span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {board[x][y-1] ='1'; test1(board, x, y-1); }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> if(x+1</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {board[x+1][y] ='1'; test1(board, x+1, y); }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> if(y+1</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> {board[x][y+1] ='1'; test1(board, x, y+1); }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;"> }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">};</span></li></ol>