qq_42001096 2022-11-25 11:01 采纳率: 100%
浏览 2
已结题

关于#二维#的问题,如何解决?

现在有一个仅包含‘X’和‘O’的二维板,请捕获所有的被‘X’包围的区域
捕获一个被包围区域的方法是将被包围区域中的所有‘O’变成‘X’
例如

X X X X
X O O X
X X O X
O X X X

执行完你给出的函数以后,这个二维板应该变成:

X X X X
X X X X
X X X X
O X X X

什么思路比较容易解决

  • 写回答

1条回答 默认 最新

  • 肩匣与橘 新星创作者: 游戏开发技术领域 2022-11-25 11:06
    关注
    
        /*
         * 所有与四条边相连的O都保留,其他O都变为X
         * 遍历四条边上的O,并深度遍历与其相连的O,将这些O都转为*
         * 将剩余的O变为X
         * 将剩余的*变为O
         */
        public int rowNum = 0;
        public int colNum = 0;
        public void solve(char[][] board) {
            if(board == null || board.length <= 0|| board[0].length <= 0){
                return;
            }
            rowNum = board.length;
            colNum = board[0].length;
            for(int i = 0; i < colNum; i++){
                dfs(board, 0, i);
                dfs(board, rowNum-1, i);
            }
            for(int i = 0; i < rowNum; i++){
                dfs(board, i, 0);
                dfs(board, i, colNum-1);
            }
            for(int i = 0; i < rowNum; i++){
                for(int j = 0; j < colNum; j++){
                    if(board[i][j] == 'O'){
                        board[i][j] = 'X';
                    }
                }
            }
            for(int i = 0; i < rowNum; i++){
                for(int j = 0; j < colNum; j++){
                    if(board[i][j] == '*'){
                        board[i][j] = 'O';
                    }
                }
            }
        }
        private void dfs(char[][] board, int row, int col) {
            // TODO Auto-generated method stub
            if(board[row][col] == 'O'){
                board[row][col] = '*';
                if(row > 1){
                    dfs(board, row-1, col);
                }
                if(col > 1){
                    dfs(board, row, col-1);
                }
                if(row < rowNum-1){
                    dfs(board, row+1, col);
                }
                if(col < colNum-1){
                    dfs(board, row, col+1);
                }
            }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 创建了问题 11月25日