当前位置: 首页 > news >正文

leetcode 529 扫雷游戏

一、题目描述

二、解题思路

整体思路

可以采用深度优先搜索+剪枝的方法来解决这个问题,这个问题其实是floodfill算法(连通块)的一类典型问题。

具体思路

(1)main函数

<1>如果board[click[0]][click[1]]=='M',也就是第一次点击就遇到地雷了,就将该位置修改为'X',然后返回盘面board;

<2>否则,就以点击的位置为起点,调用dfs函数,最后返回修改完成的盘面board即可;

(2)全局变量

<1>m,n分别表示盘面board的行数和列数;

<2>visited数组用于标记(i,j)位置是否被访问,如被访问则visited[i][j]=true,否则visited[i][j]=false;

(3)函数功能:dfs函数完成从(i,j)位置为起点进行扫雷游戏,修改盘面直至达到所需的状态;

(4)函数体

<1>首先,将visited[i][j]修改为true;

<2>接下来,对(i,j)位置进行上、下、左、右、左上、左下、右上、右下扫描,have用于记录周围是否有地雷。

1)如果遍历完成无地雷(have==false),就将board[i][j]修改为'B';

2)如果有地雷(have==true),就将board[i][j],修改为地雷的数量(字符),无需再向下探索,直接return;

<3>如果have==false,就是周围无地雷,则按照上、下、左、右、左上、左下、右上、右下全进行方位探索,如果(x,y)未越界且未被访问就对(x,y)递归调用dfs函数;

三、代码实现

class Solution {int m,n;vector<vector<bool>> visited;
public:vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {m=board.size();n=board[0].size();visited.resize(m,vector(n,false));//特殊情况处理if(board[click[0]][click[1]]=='M'){board[click[0]][click[1]]='X';return board;}dfs(board,click[0],click[1]);return board;}int dx[8]={0,1,0,-1,1,1,-1,-1};int dy[8]={1,0,-1,0,1,-1,-1,1};void dfs(vector<vector<char>>& board,int i,int j){visited[i][j]=true;//查看(i,j)块周围有没有地雷bool have=false;int count=0;for(int k=0;k!=8;k++){int x=i+dx[k];int y=j+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&board[x][y]=='M'){have=true;count++;}}//如果周围有地雷则无需再递归if(have){board[i][j]='0'+count;return;}if(!have&&board[i][j]=='E') board[i][j]='B';for(int k=0;k!=8;k++){int x=i+dx[k];int y=j+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&!visited[x][y])dfs(board,x,y);}}
};

http://www.dtcms.com/a/462009.html

相关文章:

  • 怎么用视频做网站背景外贸网站联系方式模板免费
  • 等保二级机房安全环境审计要点
  • phpcve篇
  • 长春网站设计制作培训押注网站建设
  • 蜘蛛爬网站深入理解wordpress
  • 做电影平台网站怎么赚钱吗在线制作网站 如何禁止蜘蛛收录网站
  • KAG: Boosting LLMs in Professional Domains via Knowledge Augmented Generation
  • 商城网站建设案例app门户网站
  • 利用R语言绘制散点图
  • 宁波北仑做网站团购网站怎么做
  • 【SQLite 库】sqlite3_open_v2
  • 无人机巡检光伏电站红外异常检测研究辅导+落地
  • 网站开发完成如何上线jquery效果网站
  • react+andDesign+vite+ts从零搭建后台管理系统(二)-reactRouter
  • @uiw/react-md-editor渲染的markdown如何跳转至指定地方?我来助你
  • Reactor模型和类图设计
  • 包头网站建设易通null wordpress theme
  • 项目外包公司可以去吗九江市seo
  • 专题四:前缀和~
  • C++八股 —— 线程本地存储技术
  • 位运算题5:出现k次与出现1次
  • 我们为什么需要Agent?
  • MLMs之Sora:Sora 2(开启真实物理与创意融合的新一代视频生成平台)的简介、安装和使用方法、案例应用之详细攻略
  • (1)100天python从入门到拿捏
  • 昆明网站定制制作logo网站
  • 个人做哪方面的网站网站续费怎么做
  • Differential evolution with collective ensemble learning
  • 东莞网站推广策划wordpress怎么改标题和meta
  • jquery mvvm框架
  • 做外贸的几个网站如何添加网站白名单