Surrounded Regions LeetCode

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>


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值