• LeetCode 529. Minesweeper(529. 扫雷游戏)


    题目地址:529. 扫雷游戏
    思路:
    深度优先

    public class Solution {
        // 坐标相邻的8个方向 上,下,左,右,左上,左下,右上,右下
        private int[][] dirs = {{0,1},{0,-1},{-1,0},{1,0},{-1,1},{-1,-1},{1,1},{1,-1}};
        public char[][] updateBoard(char[][] board, int[] click) {
            // 获取当前坐标
            int row = click[0], col = click[1];
            // 边界条件
            int m = board.length, n = board[0].length;
    
            // 如果找到M(未挖出的雷)或者X(已挖出的雷)游戏结束
            if (board[row][col] == 'M' || board[row][col] == 'X') {
                board[row][col] = 'X';
                return board;
            }
    
            // 找周边有几个雷
            int num = 0;
            for (int[] dir : dirs) {
                int newRow = dir[0] + row;
                int newCol = dir[1] + col;
                // 如果周围是未被揭开的雷,周围雷的数量递增
                if (newRow >= 0 && newCol >= 0 && newRow < m && newCol < n && board[newRow][newCol] == 'M') {
                    num++;
                }
            }
    
            // 如果周围有雷
            if (num > 0) {
                board[row][col] = (char) (num + '0');
                return board;
            }
    
            // 如果一个没有相邻地雷的空方块('E')被挖出,修改它为('B')
            board[row][col] = 'B';
            for (int[] dir : dirs) {
                int newRow = dir[0] + row;
                int newCol = dir[1] + col;
                // 所有和其相邻的未挖出方块都应该被递归地揭露。
                if (newRow >= 0 && newCol >= 0 && newRow < m && newCol < n && board[newRow][newCol] == 'E') {
                    updateBoard(board,new int[]{newRow,newCol});
                }
            }
    
            return board;
        }
    }
    
  • 相关阅读:
    软件工程作业03
    PSP0级要求02
    PSP0级要求日志
    软件工程个人作业02
    第三周学习进度
    第二周学习进度
    软件工程个人作业01
    Web网页登录设计
    第一周学习进度
    第三周学习进度条+PSP0过程文档
  • 原文地址:https://www.cnblogs.com/mekor/p/13533746.html
Copyright © 2020-2023  润新知