SurroundedRegions

本文介绍了一种利用递归深度优先搜索(DFS)算法解决二维棋盘上'O'被'X'围困的问题。通过对棋盘边缘的'O'进行标记避免误判,并最终将所有未标记的'O'转化为'X',实现区域围堵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.问题描述
给定一个包含'X'和'O'的2D板,捕捉所有被'X'包围的区域。一个区域通过在所围绕的区域中将所有的'O'翻转成'X'来捕获。
2.解题思路
采用递归解决,若区域中某个位置的元素为'O'则对其元素转换为'*',则对其上下左右相邻元素进行处理
3.程序源码
public void DFS(char[][] board, int row, int col)
    {
        if(row < 0 || row>(board.length - 1) || col < 0 || col >(board[0].length -1) ) return ;
        if(board[row][col] == 'O') //如果row,col指定的位置为'O',则标记为'*',除此之外对其上下左右进行递归处理
            {
                board[row][col] = '*';
                DFS(board, row-1,col);
                DFS(board,row+1,col);
                DFS(board,row,col-1);
                DFS(board,row,col+1);
            }
    }
    public void solve(char[][] board) {
        if(board.length <= 0) return;
        int row = board.length;
        int col = board[0].length;
        for(int i = 0 ; i != row ; i++) {
            DFS(board,i,col-1); //从第i行第col-1列的元素开始递归处理
            DFS(board,i,0);//从第i行第0列元素开始递归处理
         }
        for(int i = 0 ; i != col ;i++)
       {
         DFS(board,0,i); //从第0行第i列的元素开始递归处理
         DFS(board,row-1,i);//从第row-1行第i列的元素开始递归处理
        }
        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] == '*') board[i][j] = 'O';
              }
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值