NOIP2015 普及组 T3 洛谷
时间: 2025-01-21 13:37:53 浏览: 57
### NOIP2015 普及组第三题解析
对于NOIP2015普及组第三题,即扫雷游戏问题,在此提供详细的解析以及解决方案。
#### 题目概述
给定一个N行M列的地图,其中`.`表示空白格子,`*`表示有地雷的格子。现在需要输出一个新的地图,新地图中的每个位置显示该位置周围的八个方向上地雷的数量;如果当前位置本身是地雷,则标记为'*'[^1]。
#### 思路分析
解决这个问题的关键在于遍历整个二维数组,并针对每一个非地雷的位置计算其周围八邻域内地雷数量。具体实现可以通过两层嵌套循环完成,外层负责遍历所有坐标点,内层则用于统计当前坐标的邻居情况。需要注意边界条件处理,防止越界访问。
#### 实现方法
下面给出了一种基于Python语言的具体实现方式:
```python
def mine_sweeper(matrix):
n, m = len(matrix), len(matrix[0])
result = [['.' for _ in range(m)] for _ in range(n)]
directions = [(dx, dy) for dx in (-1, 0, 1) for dy in (-1, 0, 1) if (dx != 0 or dy != 0)]
for i in range(n):
for j in range(m):
if matrix[i][j] == '*':
result[i][j] = '*'
else:
count = sum(0 <= i + di < n and 0 <= j + dj < m and matrix[i + di][j + dj] == '*' for di, dj in directions)
result[i][j] = str(count) if count > 0 else '.'
return [''.join(row) for row in result]
# 测试用例
matrix = ["..*", "...", "*.*"]
print("\n".join(mine_sweeper(matrix)))
```
这段代码定义了一个名为 `mine_sweeper` 的函数来接收原始矩阵作为参数并返回更新后的矩阵。通过构建方向列表简化了对相邻单元格的操作逻辑。最后将结果转换成字符串形式以便于打印展示。
阅读全文
相关推荐









