前言
《华为OD笔试真题 python》 本专栏包含华为OD机试真题,会实时更新收纳网友反馈,为大家更新最新的华为德科OD机试试题,为大家提供学习和练手的题库,订阅本专栏后可私信进交流群哦
■ 题目描述
【开心消消乐】
给定一个N行M列的二维矩阵,矩阵中每个位置的数字取值为0或1。矩阵示例如: 1100 0001 0011 1111 现需要将矩阵中所有的1进行反转为0,规则如下: 1) 当点击一个1时,该1便被反转为0,同时相邻的上、下、左、右,以及左上、左下、右上、右下8 个方向的1(如果存在1)均会自动反转为0; 2)进一步地,一个位置上的1被反转为0时,与其相邻的8个方向的1(如果存在1)均会自动反转为0; 按照上述规则示例中的矩阵只最少需要点击2次后,所有值均为0。请问,给定一个矩阵,最少需要点击几次后,所有数字均为0?
Python代码实现:
def dfs(ni, mj):
# 点击点是0,或者已经查看过,不是有效的集合
if (ni, mj) in cache \
or mapping[ni][mj]