参考内容:北京大学信息科学技术学院《程序设计实习》,郭伟老师&刘家瑛老师
目录
1、枚举的基本思想
1.1、枚举的思想:猜测
1.2、枚举过程中三个问题
1.3、中国古代的枚举问题
2、熄灯问题
2.1、问题描述
2.2、解题分析
这样,我们的思路即是通过按下下一行的对应位置的按钮,来改变该行的亮暗状态。
所以说下一行的操作与上一行的操作环环相扣, 这样就明确了一个从上到下的步骤。
从分析来看,我想说一下这个题目可能还不明确的地方,5*6的灯状态矩阵是题目的一部分,给什么样就是什么样,操作方法是需要程序得出的,我们的分析思路是通过下一行来操作上一行。
题目的意思让我们枚举第一行,没有考虑第一行灯的状态,把枚举第一行操作作用于第一行灯的状态作为题目的开始,接下来的每一行操作都由上一行的灯的状态唯一确定。还有一个问题是最后一行不存在通过下一行进行操作,这样如果说最后一行刚好不用下一行操作,那么我们就找到了问题的解,否则这种情况无解。所以说最后一行要单独拿出来写。
2.3、实现方案一
也就是说,把第一行看做一个二进制数,不同的是左边的位权最小,与二进制数相反,当然完全按照二进制数右边位权最小也是一样的。
通过++操作就可以枚举第一行所有可能的情况。
考虑到边界特殊的情况,为了避免算法造成数组越界,对矩阵进行了扩充
有问题?不,是我还没看明白。一个Puzzle的状态跟周围四个和自己的是否操作有关,奇数个操作改变状态,偶数个操作状态不变。
2.4、实现方案二
3、讨厌青蛙问题
太讨厌了,不写了