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;
        }
    }
    
  • 相关阅读:
    ThinkPHP讲解(一)框架基础
    smarty简单介绍
    留言板
    文件系统处理
    文件上传(带有预览模式)
    文件上传(无预览模式版)
    注册、登陆、审核练习
    session讲解(二)——商城购物车练习
    session讲解(一)——登录网页练习
    P6216 回文匹配
  • 原文地址:https://www.cnblogs.com/mekor/p/13533746.html
Copyright © 2011-2022 走看看