我正在尝试为游戏算法创建可解函数。基本上是一个函数,如果给定的游戏可解或不可解,则返回 true 或 false。
该游戏是一种熄灯游戏。基本上你有一个 M*N 的按钮网格。当游戏开始时,这些灯的随机数字或存储模式被打开。按下任何一个灯都会切换一个由四个按钮组成的正方形,包括按下的按钮。
所以我正在寻找一种算法,如果我们可以关闭所有灯,则返回 true;如果我们不能这样做,则返回 false。
每行和每列中的亮灯数量必须是偶数(其中“0”也被视为“偶数”)。
证明:假设您必须按下 2 个水平相邻的按钮。如果一开始只有一盏灯,在最左边,无论你做什么,最终都会有一盏灯亮着。另一方面,只要任意距离有两盏灯,您就可以将一盏灯“移动”到另一盏灯附近,直到它们相邻,此时您可以将它们都关闭。
对于垂直相邻的按钮以及 2x2 按钮网格的扩展也是如此:每当您关闭任何单个特定灯时,其他开关都会确保每行和每列的开灯数量保持为 2 的倍数。
例如,这是可以解决的:

而这个不是(注意某些列和行中的奇数):
