- 题目大意
有一个4x4的网格上面有16个按钮。按钮只有黑白两种颜色。按其中一个按钮本身和其上下左右的按钮都会改变颜色。给出初始棋牌的状态,输出最少要按多少次按钮才可以让棋牌变为一种颜色。
- 解题思路
- 思考阶段一:找规律,这种开关类题目大多数都是有某种规律(也许),然而看了10分钟啥也没发现,放弃。
- 思考阶段二:暴力枚举,将所有情况枚举出来,选择点击次数最少的情况就好。(可能会超时)
- 如何枚举:棋盘大小已经给定4x4,一共有16个按钮,针对给出棋盘的初始状态,最少的点击次数为0(初始给出的棋盘都一个颜色)。最多为16(因为有16个按钮)。也就是说有可能点击1、2、3、4.....16个按钮。然而1个按钮有16种组合,2个按钮有C16~2种组合...16个按钮有C16~16种组合。所以这个问题就简化成了一个组合问题。从1开始循环到16分别求出所有可能来验证是否满足棋盘颜色统一的规律即可。
- 必要考虑:1.如何翻转一个按钮 2.如何判断棋盘
- 思考阶段三:暴力枚举+位压缩+打表
- 如何压缩:在枚举的基础上我们会考虑用一个vector或者int数组或者bool数组去存一个数组是否太占用空间了,因为棋盘每个按钮的状态只有2种状态。简单来说就是0和1两种。于是乎我们就会想到用位压缩法。十六个按钮对应十六个二进制数,也对应一个二进制数值。用一个int或者short就可以存储棋盘全部按钮的状态。16个