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日

悬赏问题

  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项