#12453. B - Minesweeper(扫雷)

B - Minesweeper(扫雷)

B - Minesweeper(扫雷)

时间限制:2 秒 内存限制:256 MB 分值:200 分


题目描述

给你一个大小为 H × W 的网格。 该网格由 H 个字符串描述,分别为 S1, S2, …, SH

  • i 个字符串 Si 的第 j 个字符表示格子 ​(i, j)​:
    • '.' 表示空白格
    • '#' 表示该格子上有地雷(炸弹)

现在 Dolphin 想知道: 每一个空白格周围(横向、纵向、斜向)共有多少个炸弹格?

这里“相邻”指的是:

  • 左上、右上
  • 左下、右下

一个格子最多有 ​8 个相邻格​。

Dolphin 决定: 把网格中的每一个 '.' 替换为一个数字, 表示与该空白格相邻的炸弹格数量。

请输出替换后的网格。


输入格式

H W
S1
S2
...
SH
  • 1 ≤ H, W ≤ 50
  • 每个 Si 是由 '.''#' 构成的长度为 W 的字符串。

输出格式

输出替换后的 ​H 行字符串​。

  • i 行输出字符串 Ti
  • Ti[j] 对应网格中 (i, j) 位置的最终字符
    • 若原本是 '#',则仍输出 '#'
    • 若原本是 '.',则输出相邻炸弹数的数字字符

样例输入 1

3 5
.....
.#.#.
.....

样例输出 1

11211
1#2#1
11211

例如,观察左上角格子 (1,1)

  • 它旁边只有一个炸弹格(在 (2,2)), 因此 '.' 被替换为 '1'

样例输入 2

3 5
#####
#####
#####

样例输出 2

#####
#####
#####

可能不存在空白格,此时无需修改。


样例输入 3

6 6
#####.
#.#.##
####.#
.#..#.
#.##..
#.#...

样例输出 3

#####3
#8#7##
####5#
4#65#2
#5##21
#4#310