问题 E: 扫雷游戏

传统题
1.000s 时间限制
128MB 内存限制
10 提交
5 解决

【题目描述】
给你一个大小为 n x m 二维字符矩阵 board ,表示扫雷游戏的盘面,其中:
  • 'M' 代表一个 未挖出的 地雷,
  • 'E' 代表一个 未挖出的 空方块,
  • 'B' 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的 已挖出的 空白方块,
  • 数字('1' 到 '8')表示有多少地雷与这块 已挖出的 方块相邻,
  • 'X' 则表示一个 已挖出的 地雷。
给你一个整数数组 click ,其中 click = [clickr, clickc] 表示在所有 未挖出的 方块('M' 或者 'E')中的下一个点击位置(clickr 是行下标,clickc 是列下标)。
根据以下规则,输出相应位置被点击后对应的盘面:
  1. 如果一个地雷('M')被挖出,游戏就结束了- 把它改为 'X' 。
  2. 如果一个 没有相邻地雷 的空方块('E')被挖出,修改它为('B'),并且所有和其相邻的 未挖出 方块都应该被递归地揭露。
  3. 如果一个 至少与一个地雷相邻 的空方块('E')被挖出,修改它为数字('1' 到 '8' ),表示相邻地雷的数量。
  4. 如果在此次点击中,若无更多方块可被揭露,则返回盘面。
【输入】
输入第一行两个整数n,m表示盘面的行和列
接下来n行,每行m列表示盘面的状态
最后一行两个整数r,c表示点击的位置
【输出】
根据要求规则,输出相应位置被点击后对应的盘面
【样例输入】复制
4 5
E E E E E
E E M E E
E E E E E
E E E E E
3 0
【样例输出】 复制
B 1 E 1 B
B 1 M 1 B
B 1 1 1 B
B B B B B
【提示】
  • 1 <= m, n <= 50
  • board[i][j] 为 'M'、'E'、'B' 或数字 '1' 到 '8' 中的一个
  • click.length == 2
  • 0 <= clickr< m
  • 0 <= clickc< n
  • board[clickr][clickc] 为 'M' 或 'E'

题目类型~

洪水填充法