题目描述
扫雷 你玩过扫雷吗?这个可爱的小游戏带有一个我们不记得名字的操作系统。游戏的目标是找出所有地雷在 M x N 区域内的位置。游戏会在方块中显示一个数字,告诉您该方块附近有多少地雷。每个方格最多有八个相邻方格。左边的 4 x 4 区域包含两个地雷,每个地雷由一个“”字符表示。如果我们用上述提示编号表示相同的字段,我们最终会得到右侧的字段:… … .… … 100 2210 110 1110
输入
输入将由任意数量的字段组成。每个字段的第一行包含两个整数 n 和 m ( 0 < n, m$ \le$100),分别代表字段的行数和列数。接下来的 n 行中的每一行都恰好包含 m 个字符,代表该字段。安全方格用“.”表示,地雷方格用“,”表示,两者都没有引号。n = m = 0 的第一条场线表示输入结束,不应处理。
输出
对于每个字段,仅在一行上打印消息 Field #x:,其中 x 代表从 1 开始的字段编号。接下来的 n 行应包含字段,并将“.”字符替换为那个广场附近的地雷。字段输出之间必须有一个空行。
样例输入
4 4
*…
…
.*…
…
3 5
**…
…
.*…
0 0
样例输出
Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100
这种解法比较啰嗦,但是一点都不会难懂
就是先把‘.’全部替换成0,然后遇到‘*’就把旁边的都加上1
a, b = map(int, input().split())
x = 1
while a != 0 and b != 0:
num = [[] for i in range(a)]
for i in range(a):
c = input()
num[i] = [j for j in c]
for i in range(a):
for j in range(b):
if num[i][j] == '.':
num[i][j] = 0
for i in range(a):
for j in range(b):
if num[i][j] == '*':
if i != a - 1 and num[i + 1][j] != '*':
num[i + 1][j] += 1
if j != b - 1 and num[i + 1][j + 1] != '*':
num[i + 1][j + 1] += 1
if j != 0 and num[i + 1][j - 1] != '*':
num[i + 1][j - 1] += 1
if i != 0 and num[i - 1][j] != '*':
num[i - 1][j] += 1
if j != b - 1 and num[i - 1][j + 1] != '*':
num[i - 1][j + 1] += 1
if j != 0 and num[i - 1][j - 1] != '*':
num[i - 1][j - 1] += 1
if j != b - 1 and num[i][j + 1] != '*':
num[i][j + 1] += 1
if j != 0 and num[i][j - 1] != '*':
num[i][j - 1] += 1
for i in range(a):
num[i] = [str(j) for j in num[i]]
print('Field #' + str(x)+':')
for i in range(a):
print(''.join(num[i]))
print()
x += 1
a, b = map(int, input().split())