zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    
  • 相关阅读:
    匈牙利算法——S.B.S.
    洛谷P1328 生活大爆炸版石头剪刀布——S.B.S.
    洛谷P1101 单词方阵——S.B.S.
    noip2010提高组3题题解 by rLq
    洛谷P1605 迷宫——S.B.S.
    yii2.0 curd操作
    我常用的linux命令
    常用css
    ln 软链
    crontab下git命令无效
  • 原文地址:https://www.cnblogs.com/mekor/p/13533746.html
Copyright © 2011-2022 走看看