小sun上课的时候非常喜欢玩扫雷。他现小sun有一个初始的雷矩阵,他希望你帮他生成一个扫雷矩阵。
扫雷矩阵的每一行每一列都是一个数字,每个数字的含义是与当前位置相邻的8个方向中,有多少个雷(在下图中,雷用表示);如果当前位置就是雷的话,仍输出一个。
比如初始的雷矩阵如下:
.... ..** *.*. .*.*
对应的数字矩阵为:
0122 13** *4*4 2*3*
输入描述:
第一行两个整数n,m,代表矩阵有n行m列
接下来共n行,每行m个字符
输出描述:
输出共n行m列,为扫雷矩阵。
示例1输入:
4 4 .... ..** *.*. .*.*
输出:
0122 13** *4*4 2*3*示例2
输入:
3 4
.... *..* .*.*
输出:
1111 *23* 2*3*备注:
数据范围: 1≤n,m≤10001 leq n,mleq 10001≤n,m≤1000解决方法:
方法1:
n,m = map(int, input().split())
a = [['.'] * (m+2) for i in range(n+2)]
b = []
for i in range(n):
b.append(input())
for i in range(n):
for j in range(m):
a[i+1][j+1] = b[i][j]
for i in range(1,n+1):
for j in range(1,m+1):
if a[i][j] == '.':
a[i][j] = (a[i-1][j-1:j+2]+a[i][j-1:j+2]+a[i+1][j-1:j+2]).count('*')
for i in range(n):
for j in range(m):
print(f'{a[i+1][j+1]}',end = '')
print('')
方法2:
n,m = list(map(int, input().split()))
a = [['-' for i in range(m+2)]]
for i in range(n):
b = list('-' + input() + '-')
a.append(b)
a.append(['-' for i in range(m+2)])
for i in range(1,n+1):
for j in range(1,m+1):
if a[i][j] != '*':
s = 0
if a[i-1][j] == '*':
s += 1
if a[i-1][j-1] == '*':
s += 1
if a[i-1][j+1] == '*':
s += 1
if a[i][j-1] == '*':
s += 1
if a[i][j+1] == '*':
s += 1
if a[i+1][j] == '*':
s += 1
if a[i+1][j-1] == '*':
s += 1
if a[i+1][j+1] == '*':
s += 1
a[i][j] = s
for i in a[1:-1]:
print(''.join(str(j) for j in i[1:-1]))
运行结果



