You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python扫雷网格转换功能求助:将无雷位替换为周围地雷数

实现扫雷网格的地雷计数功能

核心思路

要完成这个功能,核心就是遍历网格的每个单元格,对无雷区域统计其8个相邻方向的地雷数量,具体步骤如下:

  • 逐个检查网格中的每个位置
  • 如果当前位置是地雷(#),直接保留原符号
  • 如果是无雷区域(-),遍历其上下左右、四个对角线的8个相邻位置,统计其中地雷的总数,将数字转为字符串替换原符号
  • 注意处理边界情况:当单元格在网格边缘或角落时,要跳过超出网格范围的位置,避免索引错误

代码实现(Python)

以下是针对5×5网格的完整实现代码:

def mine_sweeper(grid):
    rows = len(grid)
    if rows == 0:
        return []
    cols = len(grid[0])
    result = []
    # 定义8个相邻方向的坐标偏移量
    directions = [(-1, -1), (-1, 0), (-1, 1),
                  (0, -1),          (0, 1),
                  (1, -1),  (1, 0), (1, 1)]
    
    for i in range(rows):
        current_row = []
        for j in range(cols):
            # 遇到地雷直接加入结果
            if grid[i][j] == '#':
                current_row.append('#')
            else:
                mine_count = 0
                # 遍历所有相邻方向
                for dx, dy in directions:
                    x = i + dx
                    y = j + dy
                    # 检查坐标是否在网格有效范围内
                    if 0 <= x < rows and 0 <= y < cols:
                        if grid[x][y] == '#':
                            mine_count += 1
                # 将计数转为字符串加入结果行
                current_row.append(str(mine_count))
        result.append(current_row)
    return result

测试示例

假设你的5×5输入网格是:

input_grid = [
    ["-", "-", "-", "#", "#"],
    ["-", "#", "-", "-", "-"],
    ["-", "-", "-", "-", "-"],
    ["#", "-", "#", "-", "-"],
    ["-", "-", "-", "-", "-"]
]

调用函数并打印结果:

output = mine_sweeper(input_grid)
for row in output:
    print(row)

输出结果为:

['1', '1', '2', '#', '#']
['1', '#', '2', '2', '2']
['2', '2', '3', '1', '1']
['#', '2', '#', '1', '0']
['1', '1', '1', '1', '0']

关键细节说明

  • 方向偏移量:用一个列表存储8个方向的坐标变化,确保不会漏掉任何相邻的地雷
  • 边界检查:通过0 <= x < rows和0 <= y < cols判断坐标是否合法,避免出现索引越界错误
  • 原网格保护:创建独立的结果网格,不会修改输入的原始网格数据

内容的提问来源于stack exchange,提问作者user20677321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:45:37