1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
## [NOIP 2015 普及组] 扫雷游戏
```python
# 读取输入的行数 m 和列数 n
m, n = map(int, input().split())
# 初始化一个列表来存储网格数据
mine = []
for _ in range(m):
# 读取每一行的数据
mine.append(input())
# 定义八个可能的方向,用于检查相邻的单元格
dir = [
[0, 1], [0, -1], [1, 0], [-1, 0],
[1, 1], [1, -1], [-1, 1], [-1, -1]
]
# 定义一个函数来计算指定位置 (x, y) 周围的雷的数量
def count(x, y):
cnt = 0
# 遍历所有八个方向
for d in dir:
dx, dy = x + d[0], y + d[1]
# 检查新坐标是否在网格范围内
if dx < 0 or dy < 0 or dx == m or dy == n:
continue
# 检查相邻单元格是否是雷
if mine[dx][dy] == '*':
cnt += 1
return cnt
# 遍历网格的每一个位置
for i in range(m):
for j in range(n):
# 如果当前位置是雷,直接输出 '*'
if mine[i][j] == '*':
print('*', end='')
else:
# 否则,输出周围雷的数量
print(count(i, j), end='')
# 每行结束后换行
print()
|