(刷题笔记) Leetcode 529. 扫雷游戏

leetcode: 529. 扫雷游戏 这里是八个方向,不是四个方向遍历,然后统计地雷的个数,如果遍历完毕后地雷数不为0,然后改变该处的位置为对应的count个数的字符,如果为0,则往八个方向。表示在所有 未挖出的 方块(‘M’ 或者 ‘E’)中的下一个点击位置(总的思想是进行遍历,从最开始点击开始,然后看其什么,然后看其。来源:力扣(LeetCode)让我们一起来玩扫雷游戏!... 阅读详情

题目

让我们一起来玩扫雷游戏!

给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷,‘E’ 代表一个未挖出的空方块,‘B’ 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字(‘1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,‘X’ 则表示一个已挖出的地雷。

现在给出在所有未挖出的方块中(‘M’或者’E’)的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板:

如果一个地雷('M')被挖出,游戏就结束了- 把它改为 'X'。
如果一个没有相邻地雷的空方块('E')被挖出,修改它为('B'),并且所有和其相邻的方块都应该被递归地揭露。
如果一个至少与一个地雷相邻的空方块('E')被挖出,修改它为数字('1'到'8'),表示相邻地雷的数量。
如果在此次点击中,若无更多方块可被揭露,则返回面板。

示例 1:

输入:

 [['E', 'E', 'E', 'E', 'E'],
 ['E', 'E', 'M', 'E', 'E'],
 ['E', 'E', 'E', 'E', 'E'],
 ['E', 'E', 'E', 'E', 'E']]

 Click : [3,0]

输出:

[['B', '1', 'E', '1', 'B'],
['B', '1', 'M', '1', 'B'],
['B', '1', '1', '1', 'B'],
['B', 'B', 'B', 'B', 'B']]

注意:

输入矩阵的宽和高的范围为 [1,50]。
点击的位置只能是未被挖出的方块 ('M' 或者 'E'),这也意味着面板至少包含一个可点击的方块。
输入面板不会是游戏结束的状态(即有地雷已被挖出)。
简单起见,未提及的规则在这个问题中可被忽略。例如,当游戏结束时你不需要挖出所有地雷,考虑所有你可能赢得游戏或标记方块的情况。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minesweeper

解题思路

这道题首先比较难的是读懂题目。
然后读懂之后我想的就是深度优先搜索,其他的方法暂时还没想到。
深度优先搜索的思路就是搜索目标位置的八邻域,确定要修改信息的位置。
然后在每个要修改位置的地方在八邻域查找地雷的个数。

当然这是一开始的思路,然后写了半天都过不了。
后来发现是结束条件写错了,搜索位置也不对。
而且只需要在没有地雷的位置上进行八邻域搜索目标位置。

代码(C++)

class Solution {
public:

    void dfs(vector<vector<char>>& board,int row,int col){
       
        if(row>=board.size()||col>=board[0].size()||row<0||col<0) return;
        if(board[row][col] !='E') return; 
        int inum[]={1,0,-1,0,1,-1,1,-1};
        int jnum[]={0,1,0,-1,1,-1,-1,1};

        int cnt=0;

        for(int i=0;i<8;++i){
             
             int newrow=row+inum[i];
             int newcol=col+jnum[i];

             if(newrow>=0&&newrow<board.size()&&newcol>=0&&newcol<board[0].size()&&board[newrow][newcol]=='M'){
                 cnt++;
             }
        }

        if(cnt==0){
            board[row][col]='B';
            for(int i=0;i<8;++i){
                int x=row+inum[i];
                int y=col+jnum[i];
                dfs(board,x,y);
        }
        
        }
        else{
            board[row][col]=cnt+'0';
        }
        
    }
    vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {

        int row=click[0];
        int col=click[1];

        char clicked=board[row][col];

        if(clicked=='M'){
            board[row][col]='X';
        }

        if(clicked=='E'){

             dfs(board,row,col);

        }

        return board;

    }
};
ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用) 萌新常用的都在这了,本萌新的模板集。 阅读详情

相关推荐

基于的公司考勤系统(程序+开题报告)(开题报告+源码)

我们将研究和设计系统的架构和功能模块,包括员工信息管理模块、部门信息管理模块、考勤信息记录模块、工资信息计算模块、请假信息处理模块、奖惩信息管理模块、公告信息发布模块、上班打卡模块以及加班申请模块等。目的: 本项目旨在设计并实现一个基于的公司考勤系统,通过该系统,可以实现对员工、部门信息、考勤信息、工资信息、请假信息、奖惩信息、公告信息、上班打卡、加班申请等功能的统一管理。基于的公司考勤系统的设计与实现,旨在通过自动化技术提高考勤管理的效率和准确性,为企业管理提供有力的数据支持。最终成品以下面运行环境。

迟限程序设计 997

leetcode-529-扫雷游戏-c++

思路:点开一个格子时,判断当前格子是不是雷,是雷的话,把该格子改为'X',然后直接返回。若当前格子不是雷,则先统计周围有几个雷,如果旁边一个雷都没有,把当前格子改为'B',并递归的搜索其他八个方向的格子。如果旁边有雷,则把当前格子改为雷的数目,返回。 其中的order表示访问次序,用来区分是不是一开始就点到了雷。 class Solution { private: void dfs(...

u014450222的博客 606

OpenFOAM-多孔介质模型(porous media)

文章目录一、多孔介质(porous media)二、使用步骤1.达西定律2.Darcy-Forchheimer3.OpenFOAM fvOptions4.paraview动画每帧显示时间(Annotate Time)5.参考内容总结 一、多孔介质(porous media) 在流体力学中,流体流经多孔介质是指流体流经多孔介质时的行为方式,如海绵或木材,或使用沙子或其他多孔材料过滤水。 我们将展示如何设置多孔层,并使用OpenFOAM模拟流体通过该介质。 二、使用步骤 1.达西定律 达西定律最初是由达西通.

zq93538196的博客 9938

开源项目:MineSweeper 指南

开源项目:MineSweeper 指南 1. 项目介绍 MineSweeper 是一个基于 GitHub 的扫雷游戏实现,由 ars3n11 开发。它重现了经典的扫雷体验,允许玩家在命令行界面或通过简单的网页交互享受这一逻辑游戏的乐趣。项目利用现代编程技术,旨在提供一个可扩展且易于定制的游戏环境。扫雷作为一款考验逻辑思维和推理能力的经典游戏,此开源版本适合所有年龄段的玩家,并且对于学习软件开发的新...

gitblog_00184的博客 1126

C++中为什么要引入引用变量?

C++引用机制的设计哲学在于平衡性能与安全性。它解决了指针的三个痛点:语法噪音、空指针风险和语义模糊,同时保持了指针的效率优势。引用必须绑定有效对象且不可重绑定的特性增强了安全性,其值语义语法更直观。尤其在运算符重载和const引用场景中,引用展现了不可替代的优势。本质上,引用是编译器优化的指针实现,体现了C++"零开销抽象"的核心思想——既保持底层性能,又提供高级抽象。这种设计允许开发者根据场景灵活选择指针或引用,反映了C++多范式共存的语言智慧。

教学 & 技术专栏 175

Centos7.6操作系统安装+Bond配置(600GB磁盘版本)

1.安装前准备工作 准备centos7.6操作系统镜像 CentOS-7-x86_64-DVD-1810.iso 服务器安装一般都是在BMC界面操作,所以安装前需要在BMC界面挂载好操作系统镜像 重启服务器后自动进入安装界面。 华为大数据集群安装操作系统配置

小时光 6010

LeetCode 529. 扫雷游戏(C++、python)

让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵。 'M' 代表一个未挖出的地雷,'E' 代表一个未挖出的空方块,'B' 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字('1' 到 '8')表示有多少地雷与这块已挖出的方块相邻,'X' 则表示一个已挖出的地雷。 现在给出在所有未挖出的方块中('M'或者'E')的下一个点击位置(行和列索引),根据以下规则,...

qq_27060423的博客 537

别再硬啃C代码了!用Simulink的Matlab Function模块手把手教你搭建CRC8校验模型(附完整M脚本)

本文详细介绍了如何利用Simulink的Matlab Function模块轻松实现CRC8校验模型,替代传统的C代码编写。通过可视化建模和即时验证,开发者可以高效完成算法设计,并自动生成嵌入式代码。文章包含完整的M脚本示例和工程实践技巧,特别适合嵌入式系统开发人员提升工作效率。

weixin_42520661的博客 183

C#进阶:扫雷 附完整源码与解读

C#版本扫雷,有flag标记和计时功能,难度自适应。原创代码,源码完整,思路解析清晰。

Serendipitor的博客 1303

Comsol 管道导波裂纹检测:从建模到求解的完整流程解析

本文详细解析了使用Comsol Multiphysics进行管道导波裂纹检测的完整仿真流程。从几何建模、材料定义、物理场设置到网格划分与求解后处理,系统阐述了如何构建高保真虚拟模型以模拟导波与裂纹的相互作用。重点分享了激励信号设置、频散效应处理及参数化扫描等实战技巧,旨在帮助工程师与研究人员高效优化无损检测方案,降低实验成本。

weixin_29207439的博客 74

某音私信接口二进制解析

本文探讨了某音私信接口的二进制请求处理过程,重点分析了请求体中的非文本字符和混合编码结构。文章详细描述了编码过程,包括使用Protocol Buffers的序列化方法将结构化数据转换为字节流,并通过Uint8Array包装成二进制数组。作者展示了如何提取和补全s.encode方法,并将其转化为Base64字符串以便在Python中解码执行

码王吴彦祖的博客 901

Leetcode刷题笔记 529. 扫雷游戏

20.有效的括号 时间:2020年8月20日 知识点:dfs、bfs 题目链接:https://leetcode-cn.com/problems/minesweeper/ 题目 让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷,‘E’ 代表一个未挖出的空方块,‘B’ 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字(‘1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,‘X’ 则表示一个已挖出的地雷。 现在给出在所有未挖出的方块中(‘

cjl的博客 781

【打卡帖】7日玩转ESP32——(第4日) 串口的输入输出

【福利帖】7日玩转ESP32——(第4日) 串口的输入输出

1377

力扣529题:扫雷游戏

让我们一起来玩扫雷游戏!给你一个大小为 二维字符矩阵 ,表示扫雷游戏的盘面,其中:给你一个整数数组 ,其中 表示在所有 未挖出的 方块( 或者 )中的下一个点击位置( 是行下标, 是列下标)。根据以下规则,返回相应位置被点击后对应的盘面:示例 1: 输入:board = [["E","E","E","E","E"],["E","E","M","E","E"],["E","E","E","E","E"],["E","E","E","E","E"]], click = [3,0] 输出:[["B","1

SCP173SCP173的博客 1681

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LeetCode529 扫雷游戏

通过对扫雷游戏问题的分析和解决,我们深入理解了 BFS 算法在处理这类需要递归探索的问题中的应用。在实际编程中,遇到类似问题时,我们可以借鉴这种思路,通过合理的数据结构和算法来高效地解决问题。同时,对问题的边界条件和细节处理也至关重要,这将直接影响代码的正确性和鲁棒性。希望这篇博客能帮助你更好地掌握扫雷游戏问题的解法,以及 BFS 算法的应用技巧。

qq_64604732的博客 1326

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LeetCode529:扫雷游戏

'M' 代表一个未挖出的地雷,'E' 代表一个未挖出的空方块,'B' 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字('1' 到 '8')表示有多少地雷与这块已挖出的方块相邻,'X' 则表示一个已挖出的地雷。如果一个没有相邻地雷的空方块('E')被挖出,修改它为('B'),并且所有和其相邻的未挖出方块都应该被递归地揭露。如果一个至少与一个地雷相邻的空方块('E')被挖出,修改它为数字('1'到'8'),表示相邻地雷的数量。输入面板不会是游戏结束的状态(即有地雷已被挖出)。

S_t_a_r_123的博客 1005

Leetcode529. DFS之应用(三):解决扫雷游戏

DFS 扫雷

obrcnh的博客 773

LeetCode题练习与总结:扫雷游戏--529

本文详细介绍了扫雷游戏问题的解题思路和Java实现,包括时间复杂度和空间复杂度分析,涉及递归、数组操作等多个知识点,为解决类似问题提供了清晰的指导。

一直学习永不止步 1274

[每日一题] Leetcode 529 扫雷游戏

Leetcode 529 扫雷游戏题目描述解题思路代码版本1for循环优化数组优化 题目描述 让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷,‘E’ 代表一个未挖出的空方块,‘B’ 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字(‘1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,‘X’ 则表示一个已挖出的地雷。 现在给出在所有未挖出的方块中(‘M’或者’E’)的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对

qq_42246695的博客 282

puzzle(1011)《平面逆推》扫雷

扫雷的重要操作技巧和简单策略

nameofcsdn的博客 8827

java制作扫雷游戏中埋雷的难点_LeetCode 力扣官方题解 | 529.扫雷游戏

力扣 529.扫雷游戏(点击查看题目)题目描述让我们一起来玩扫雷游戏!给定一个代表游戏板的二维字符矩阵。 'M' 代表一个未挖出的地雷,'E' 代表一个未挖出的空方块,'B' 代表没有相邻(上,下,左,右,和所有4 个对角线)地雷的已挖出的空白方块,数字('1' 到 '8')表示有多少地雷与这块已挖出的方块相邻,'X' 则表示一个已挖出的地雷。现在给出在所有未挖出的方块中('M'或者'E')的下一...

weixin_30487899的博客 304

Java实现 LeetCode 529 扫雷游戏(DFS)

529. 扫雷游戏 让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷,‘E’ 代表一个未挖出的空方块,‘B’ 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字(‘1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,‘X’ 则表示一个已挖出的地雷。 现在给出在所有未挖出的方块中(‘M’或者’E’)的下一个点击位置(行和列索引)...

南 墙 1万+

Leetcode 529. 扫雷游戏 C++

Leetcode 529. 扫雷游戏 题目 让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷,‘E’ 代表一个未挖出的空方块,‘B’ 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字(‘1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,‘X’ 则表示一个已挖出的地雷。 现在给出在所有未挖出的方块中(‘M’或者’E’)的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板: 如果一个地雷(‘M’)被挖出,游戏就

weixin_43750513的博客 291

​LeetCode刷题实战529:扫雷游戏

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !...

程序IT圈 253

面试高频题 力扣 529. 扫雷游戏 洪水灌溉(FloodFill) 深度优先遍历(dfs) 8方向遍历 C++解题思路 每日一题

本文围绕力扣529.扫雷游戏问题展开,详细讲解了如何用DFS(深度优先搜索)模拟扫雷点击后的棋盘更新逻辑。 首先,文章通过示例直观演示了扫雷棋盘的更新过程,帮助理解规则:点击地雷('M')会将其标记为'X';点击未翻开的空方块('E')时,需计算周围地雷数,若数量大于0则更新为对应数字并终止扩散,若为0则标记为'B'并向8个方向的'E'递归扩散。 接着,阐述了具体思路,包括处理点击事件、计算周围地雷数、根据地雷数决定扩散或终止。随后给出了完整的C++代码实现,解析了8方向偏移量数组、主函数及DFS函数的

Q741_147的博客 695

leetcode 529. 扫雷游戏 Minesweeper

本文介绍了LeetCode 529题扫雷游戏的解法。该问题要求模拟扫雷游戏中的点击操作,使用深度优先搜索(DFS)递归处理点击事件。当点击位置是地雷'M'时直接标记为'X';若是空白'E'则统计周围地雷数量,若无地雷则标记为'B'并递归处理相邻空白格,否则显示地雷数。算法时间复杂度为O(mn),空间复杂度为O(mn)。代码通过8方向检查相邻格子实现了完整的扫雷逻辑。

邹九的个人博客 518

【每日刷题】Day144

1. 太平洋大西洋水流问题 2. 扫雷游戏 3. 机器人的运动范围

2301_78022459的博客 1202
上一篇: (刷题笔记) Leetcode 515. 在每个树行中找最大值
下一篇: (刷题笔记) Leetcode 309. 最佳买卖股票时机含冷冻期
Lucky&Happy
博客等级 码龄10年 1粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值