为何我的Python扫雷克隆版邻接地雷计数不准确?
扫雷邻接地雷计数错误的原因及修复
核心错误:邻居过滤条件逻辑错误
count_neighbours函数中,判断是否跳过自身格子的条件写反了:
原代码中的条件:
if i != a and j != b: # 意图排除自身格子
这个条件的实际效果是仅检查既不在当前行也不在当前列的对角线格子,直接漏掉了同一行的左右邻居、同一列的上下邻居,导致统计的地雷数最多少4个,完全不符合扫雷的规则。
正确的逻辑应该是仅排除i=a且j=b的自身格子,其他周围8个方向的格子都要检查,修改后的条件可以是两种写法:
# 写法1:直接排除自身格子 if not (i == a and j == b):
或者等价的:
# 写法2:只要行或列不同,就属于邻居范围 if i != a or j != b:
错误验证(结合示例)
以示例中第二行第一列(坐标(1,0))的计数为例:
原始地雷布局中,它的邻居里有(0,1)、(0,2)、(2,1)三个地雷,但原函数只统计了对角线的(0,2)和(2,1),漏掉了同一列的(0,1),最终结果显示为2,比正确值少1,完全匹配条件错误导致的问题。
额外优化建议
count_neighbours上的@staticmethod装饰器多余——该函数依赖全局变量minefield,没有绑定类实例的必要,建议直接去掉装饰器;更规范的写法是将minefield作为参数传入函数,避免使用全局变量。
内容的提问来源于stack exchange,提问作者Colosen
相关产品推荐
相关产品推荐

