529. 扫雷游戏 DFS

本文详细解析了扫雷游戏的算法实现,通过深度优先搜索(DFS)策略,介绍了如何在点击方块时更新游戏状态,包括揭示空白区域、计算周围雷数及处理雷区触发。代码示例清晰展示了算法流程。

529. 扫雷游戏

2020/8/20每日一题打卡√

题目描述

在这里插入图片描述

解题思路

感觉这个题最难的点还是在于理解题意和样例
理解了之后就很明确了,就是正常的DFS
如果点击了雷,就爆炸
如果没点到雷,就判断这个位置旁边有没有雷;如果有雷,把这个位置设置成周围雷的数量
如果没有雷,把这个位置标记成B,然后递归的标记标记位置周围的位置

 /*
			  * 529. 扫雷游戏
			  * 2020/8/20
			  * medium
			  */
			 public char[][] updateBoard(char[][] board, int[] click) {
				 int x = click[0],y = click[1];
				 if(board[x][y] == 'M') {//如果选中了地雷
					 board[x][y] = 'X';
				 }
				 else if(board[x][y] == 'E') { //如果选中的空方快,递归的修改其它方块
					 dfsUpdateBoard(board,x,y,board.length,board[0].length);
					 
				 }
				 return board;
			    }
			 
			 public void dfsUpdateBoard(char[][] board,int x,int y,int m,int n) {
				 //8个方向
				 int xShift[] = {-1,-1,-1,0,0,1,1,1};
				 int yShift[] = {-1,0,1,-1,1,-1,0,1};
				 //如果不满足条件直接返回
				 if(x < 0 || x >= m || y < 0 || y >= n || board[x][y] != 'E') {
					 return;
				 }
				 //统计这个节点周围有多少个地雷
				 int count = 0;
				 for (int i = 0; i < yShift.length; i++) {
					int xx = x + xShift[i];
					int yy = y + yShift[i];
					if(xx >= 0 && xx < m && yy >= 0 && yy < n && board[xx][yy] == 'M') {
						count++;
					}
				}
				 //如果四周没有地雷,修改这个节点的值,并递归的点击四周
				 if(count == 0) {
					 board[x][y] = 'B';
					 for (int i = 0; i < yShift.length; i++) {
							int xx = x + xShift[i];
							int yy = y + yShift[i];
							if(xx >= 0 && xx < m && yy >= 0 && yy < n && board[xx][yy] == 'E') {
								dfsUpdateBoard(board,xx,yy,m,n);
							}
				     }
				 }else {//如果和地雷相邻,修改距离
					 board[x][y] = (char) (count + '0');
				 }
			 }

在这里插入图片描述

【项目名称】:运用C++编程语言开发的视觉图像三维重构系统 【目标用户】:面向有意涉足跨技术领域学习的入门者及资深开发者。适合用作毕业设计课题、教学实践任务、大型作业、工业实训或初级科研项目启动。 【系统概述】: 本系统通过视觉图像数据实现三维物体的几何建模,其核心模块涵盖以下功能: - **基础架构**:集成工程所需的基础数据组织形式,涵盖影像资料、深度图谱、网格模型、视角参数等元素的存储与交互机制。 - **数学运算库**:包含矩阵操作、矢量计算、四元数变换等数学工具,支撑几何计算需求。 - **特征处理单元**:支持SIFT与SURF两类特征识别算法的提取与匹配操作。 - **运动结构复原模块**:实现摄像机位姿推算、三维空间点三角定位及光束法平差等关键技术。 - **多视角立体模块**:通过立体匹配算法生成高密度点云数据。 - **表面重建组件**:将离散点云转化为连续网格曲面。 - **纹理映射单元**:生成贴合模型表面的纹理贴图。 - **应用案例库**:提供典型应用场景的代码示范。 - **缓存目录**:用于暂存运算过程产生的临时文件。 系统以模块化架构确保各功能单元独立可拓展,适用于计算机视觉与图形学领域的算法研究及工程实践。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值