题解:蓝桥云课 549 扫雷
【题目来源】
【题目描述】
在一个 \(n\) 行 \(m\) 列的方格图上有一些位置有地雷,另外一些位置为空。
请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。
【输入】
输入的第一行包含两个整数\(n,m\)。
第 \(2\) 行到第 \(n+1\) 行每行包含 \(m\) 个整数,相邻整数之间用一个空格分隔。如果对应的整数为 \(0\),表示这一格没有地雷。如果对应的整数为 \(1\),表示这一格有地雷。
【输出】
输出 \(n\) 行,每行 \(m\) 个整数,相邻整数之间用空格分隔。
对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出 \(9\)。
【输入样例】
3 4
0 1 0 0
1 0 1 0
0 0 1 0
【输出样例】
2 9 2 1
9 4 9 2
1 3 9 2
【解题思路】

【算法标签】
《蓝桥云课 549 扫雷》 #2022# #思维# #贪心# #省赛# #BFS#
【代码详解】
n, m = [int(i) for i in input().split()] # 输入n和m
a = [[int(i) for i in input().split()] for i in range(n)] # 输入a矩阵
b = [[0 for i in range(m)] for i in range(n)] # 初始化b矩阵
dx=[-1,-1,-1,0,0,1,1,1] # 定义x和y的偏移量
dy=[-1,0,1,-1,1,-1,0,1]
for x in range(n): # 遍历x和y坐标
for y in range(m):
if a[x][y]==1: # 如果[x,y]点上有地雷
b[x][y]=9 # 标记为9
else: # 否则
cnt = 0 # 定义计数器,统计8个方向的地雷数量
for i in range(8): # 遍历8个方向
xx = x+dx[i] # x和y偏移
yy = y+dy[i]
if xx>=0 and xx<n and yy>=0 and yy<m: # 在坐标范围内
if a[xx][yy]==1: # 如果位置上有地雷
cnt+=1 # 计数器自增1
b[x][y]=cnt # 标记周围地雷数量
for i in range(n): # 输出b矩阵
for j in range(m):
print(b[i][j], end=' ')
print()
【运行结果】
3 4
0 1 0 0
1 0 1 0
0 0 1 0
2 9 2 1
9 4 9 2
1 3 9 2
浙公网安备 33010602011771号