力扣:130. 被围绕的区域

文章描述了一个使用深度优先搜索的算法,从矩阵的边界开始标记O字符,然后遍历整个矩阵,将标记的O替换为A,非边界O变为X,实现矩阵中O字符的标记过程。
摘要由CSDN通过智能技术生成

 深度优先搜索解法:

1.先从矩阵的外部的来标记符合条件的O字符。把标记的O字符换成字符A,同时在边界的O字符的基础上继续来查找和边界相连的O字符。

2.之后用for循环来遍历二维数组遍历到记号A的字符就给他赋值为O,其他的字符都赋值为X。

class Solution {
    int m,n;
    public void solve(char[][] board) {
        //得到矩阵的长度
       m=board.length;
       //得到矩阵的宽度
       n=board[0].length;
       //标记0列和n-1列边界的字符O
      for(int i=0;i<m;i++){
          biaoji(i,0,board);
          biaoji(i,n-1,board);
      }
      //标记0行和m-1行边界的字符O
      for(int j=1;j<n-1;j++){
          biaoji(0,j,board);
          biaoji(m-1,j,board);
      }
      //遍历这个二维数组的全部值
      for(int i=0;i<m;i++){
          for(int j=0;j<n;j++){
              //判断二维数组的值是否是标记的值是的话,把标记的只改为O
               if(board[i][j]=='A'){
                   board[i][j]='O';
               }else{ //不是的话将其他的O改成X
                   board[i][j]='X';
               }
          }
      }
    }
    //进行标记的函数
    public void biaoji(int i,int j,char[][]board){
        //进行查找标记
        if(i<0||i>m-1||j<0||j>n-1||board[i][j]!='O'){
            return;
        }
        //标记符合条件的值
        board[i][j]='A';
        //进行深度优先搜索来查找边界相邻的O
        biaoji(i,j+1,board);
        biaoji(i,j-1,board);
        biaoji(i+1,j,board);
        biaoji(i-1,j,board);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值