Sample Input
bwwb
bbwb
bwwb
bwww
Sample Output
4
题意:给一个4x4的棋盘,棋盘上有16个棋子,棋子正反两面分别为黑色和白色,给出初始状态(棋子可能是正面可能是反面),可以操作任意多次,每次操作可以翻转任意一个棋子,同时被翻转棋子的相邻棋子也会被翻转,问最少需要几步操作就可以将所有棋子置于全黑或者全白。
思路:实际上一个棋子最终的状态只与初始状态和被翻转过的次数的奇偶性有关,如果是偶次则保持初始状态不变,如果是奇数则是另一面,所以可以直接将翻转次数当做只有0次和1次,同时,翻转的顺序也是不会影响最终的状态的。因此可以将题意转化为:最多操作16次,且每个格子只能操作1次,问能否达到目的,这时候翻转的所有状态就只有2^16种。因此可以枚举所有翻转状态,再一一判断当前这种翻转状态下的最终态是否满足目的。
具体做法:将棋盘转化成一行二进制数,用1表示黑色,用0表示白色(左上角是第15位,即最高位,右下角第0位),判断初态是否满足要求,不满足则从1枚举到(1 << 16) - 1,中的所有状态。枚举的