529. 扫雷游戏

难度中等130收藏分享切换为英文关注反馈

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

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

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

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

示例 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']]解释:

示例 2:

输入: [['B', '1', 'E', '1', 'B'],['B', '1', 'M', '1', 'B'],['B', '1', '1', '1', 'B'],['B', 'B', 'B', 'B', 'B']]Click : [1,2]输出: [['B', '1', 'E', '1', 'B'],['B', '1', 'X', '1', 'B'],['B', '1', '1', '1', 'B'],['B', 'B', 'B', 'B', 'B']]解释:

注意:

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

通过次数19,888提交次数30,721

简单DFS:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<vector>
#include<stdlib.h>
using namespace std;
bool judge(int x, int y, int lx, int ly)
{if (x < 0 || x > lx)return false;if (y < 0 || y > ly)return false;return true;
}
void slove(vector<vector<char> >& board, vector<int>click) {if (!judge(click[0], click[1], board.size() - 1, board[0].size() - 1))return;if (click[1] >= 1&&click[0] == 3){int a = 1;a++;}if (board[click[0]][click[1]] == 'E'){int cnt = 0;int a[3] = { -1,0,1 };int b[3] = { -1,0,1 };for (int i = 0; i < 3; i++)//8方搜索{for (int j = 0; j < 3; j++){if(!judge(click[0] + a[i], click[1] + b[j], board.size()-1,board[0].size()-1))continue;if (board[click[0] + a[i]][click[1] + b[j]] == 'M')cnt++;}}if (cnt > 0){board[click[0]][click[1]] = '0' + cnt;return;}board[click[0]][click[1]] = 'B';int x = click[0];int y = click[1];for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (a[i] == b[j] && a[i] == 0)continue;if (!judge(x + a[i], y + b[j], board.size() - 1, board[0].size() - 1))continue;vector<int> v;v.clear();v.push_back(x + a[i]);v.push_back(y + b[j]);slove(board, v);}}return;}return;
}
vector<vector<char>> updateBoard(vector<vector<char> >& board, vector<int>&click) {int x = click[0];int y = click[1];if (board[x][y] == 'M'){board[x][y] = 'X';return board;}slove(board, click);return board;
}int main()
{vector<vector<char> > board;for (int i = 0; i < 4; i++){vector<char> v;v.clear();for (int j = 0; j < 5; j++){char c;cin >> c;v.push_back(c);}board.push_back(v);}vector<int> click;click.push_back(3);click.push_back(0);updateBoard(board, click);for (int i = 0; i < board.size(); i++){for (int j = 0; j < board[i].size(); j++){cout << board[i][j];}cout << endl;}return 0;
}

Leetcode529. 扫雷游戏相关推荐

  1. leetcode529. 扫雷游戏(dfs)

    让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵. 'M' 代表一个未挖出的地雷,'E' 代表一个未挖出的空方块,'B' 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方 ...

  2. python扫雷 广度优先_Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)...

    Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tre ...

  3. 一步一步实现扫雷游戏(C语言实现)(三)

    使用WIN32API连接窗口 此项目相关博文链接 一步一步实现扫雷游戏(C语言实现)(一) 一步一步实现扫雷游戏(C语言实现)(二) 一步一步实现扫雷游戏(C语言实现)(三) 一步一步实现扫雷游戏(C ...

  4. python扫雷游戏_python实现扫雷小游戏

    前面我们用python实现了贪吃蛇.坦克大战.飞船大战.五子棋等游戏 今天我们用python来实现一下扫雷游戏 本游戏代码量和源文件较多 可以从我的GitHub地址中获取 构建地雷区 import r ...

  5. 使用 python 的单人AI 扫雷游戏

    运行扫雷 1.确保安装了Python 3.6+. 2.安装Pygame. 3.克隆这个存储库: 设置 minesweeper.py ⚓ 扫雷游戏表示 class Minesweeper():def _ ...

  6. python3扫雷代码_GitHub - pantaduce/minesweeper: Python代码编写的扫雷游戏

    Minesweeper(扫雷) 这是一个由Python编写的扫雷游戏,基于tkinter/Tkinter开发,支持python2和python3. 功能 概述 基本功能:左键扫雷,右键标记 记录游戏步 ...

  7. 用c语言写扫雷游戏倒计时代码,课内资源 - 基于VS2013实现的扫雷小游戏

    1.任务概述 1.1 系统总体目标 本项目的目的在于开发一个扫雷软件,该软件面向游戏玩家用户,具有进行扫雷游戏的功能.游戏玩家将使用系统中的如下功能: 进行游戏 使用自定义游戏规格功能 使用计时器功能 ...

  8. CCF NOI1054 扫雷游戏

    问题链接:CCF NOI1054 扫雷游戏. 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 扫雷游戏是一款十分经典的单机小游戏.它的精髓在于,通过已翻开格子所提示的周围格地雷 ...

  9. java开源游戏下载安装_开源java扫雷游戏,Swing版。

    开源java扫雷游戏,Swing版. xC6JnAIE.zip (60.07 KB) 开源java扫雷游戏,Swing版. 程序文件说明 文件 内容 备注 AboutFrame.java 程序&quo ...

最新文章

  1. java 卖票问题_Java之多线程窗口卖票问题(Thread)
  2. sql必知必会(第四版) 学习笔记二 视图
  3. apache camel 相关配置_MyBatis-Plus返回map自动转驼峰配置object-wrapper-factory
  4. 基于sobel算法的边缘检测设计与实现
  5. 【BZOJ1880】[Sdoi2009]Elaxia的路线 最短路+DP
  6. 清华大学:全面如期开课,履行社会责任!
  7. fseek linux 大文件_上传大文件
  8. elasticsearch 关联查询_Elasticsearch字段类型之Range经典应用场景
  9. C#技术分享【PDF转换成图片——11种方案】
  10. python基础笔记(六)_数据清洗及建模
  11. Optitrack光学动作捕捉
  12. 爬取网站使用代理IP
  13. 学习mars3d的过程记录—配置环境
  14. python对excel增删改查_利用python模拟sql语句对员工表格进行增删改查
  15. 跑步戴什么耳机比较好、精挑五款最佳跑步耳机推荐
  16. js对象转byte数组
  17. 东北大学软件项目管理与过程改进复习提纲(2020)——第十一章《项目风险管理》
  18. 风变Python之旅4---字典列表的学习
  19. matlab生成热敏电阻温度和阻值的数学关系式
  20. matlab狐狸与野兔数学模型,数学建模狐狸野兔问题.doc

热门文章

  1. TensorFlow神经网络(五)输入手写数字图片进行识别
  2. [linux 技巧] 使用 screen 管理你的远程会话(转载)
  3. iOS开发基础:OC数组对象NSArray的常用方法
  4. 400G时代即将来袭,新型光纤或为最佳拍档
  5. 政府网络安全意识提升 中小企业客户却有待培育
  6. 【个性化阅读】ZapTxt的提醒姗姗来迟
  7. IE6下兼容CSS属性min-height的解决办法
  8. python---01.名片管理系统
  9. 解决Python3 pip list 红色DEPRECATION
  10. 创建线程有几种不同的方式