参考内容:北京大学信息科学技术学院《程序设计实习》,郭伟老师&刘家瑛老师

目录

1、枚举的基本思想

1.1、枚举的思想:猜测

1.2、枚举过程中三个问题

1.3、中国古代的枚举问题

2、熄灯问题

2.1、问题描述

2.2、解题分析

2.3、实现方案一

2.4、实现方案二

3、讨厌青蛙问题


1、枚举的基本思想

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

1.1、枚举的思想:猜测

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

1.2、枚举过程中三个问题

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

1.3、中国古代的枚举问题

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

2、熄灯问题

2.1、问题描述

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

036 枚举基本思想(熄灯问题、讨厌青蛙问题)  036 枚举基本思想(熄灯问题、讨厌青蛙问题)

2.2、解题分析

036 枚举基本思想(熄灯问题、讨厌青蛙问题)这样,我们的思路即是通过按下下一行的对应位置的按钮,来改变该行的亮暗状态。

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

所以说下一行的操作与上一行的操作环环相扣, 这样就明确了一个从上到下的步骤。

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

从分析来看,我想说一下这个题目可能还不明确的地方,5*6的灯状态矩阵是题目的一部分,给什么样就是什么样,操作方法是需要程序得出的,我们的分析思路是通过下一行来操作上一行。

题目的意思让我们枚举第一行,没有考虑第一行灯的状态,把枚举第一行操作作用于第一行灯的状态作为题目的开始,接下来的每一行操作都由上一行的灯的状态唯一确定。还有一个问题是最后一行不存在通过下一行进行操作,这样如果说最后一行刚好不用下一行操作,那么我们就找到了问题的解,否则这种情况无解。所以说最后一行要单独拿出来写。

2.3、实现方案一

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

也就是说,把第一行看做一个二进制数,不同的是左边的位权最小,与二进制数相反,当然完全按照二进制数右边位权最小也是一样的。

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

通过++操作就可以枚举第一行所有可能的情况。

考虑到边界特殊的情况,为了避免算法造成数组越界,对矩阵进行了扩充

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

有问题?不,是我还没看明白。一个Puzzle的状态跟周围四个和自己的是否操作有关,奇数个操作改变状态,偶数个操作状态不变。

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

2.4、实现方案二

036 枚举基本思想(熄灯问题、讨厌青蛙问题)

3、讨厌青蛙问题

太讨厌了,不写了

相关文章:

  • 2021-12-15
  • 2021-08-10
  • 2021-10-19
  • 2022-12-23
  • 2022-12-23
  • 2022-02-08
猜你喜欢
  • 2021-12-31
  • 2021-11-09
  • 2022-02-01
  • 2021-12-20
  • 2022-12-23
  • 2021-06-06
  • 2021-06-20
相关资源
相似解决方案