一个版本的灯光可以解决游戏问题

时间:2014-11-16 11:00:49

标签: algorithm solver

我正在尝试为游戏算法创建一个可解决性函数。基本上是一个函数,如果它可以解决,它会为给定的游戏返回true或false。

游戏是一种熄灯游戏。基本上你有一个M * N网格的按钮。当游戏开始时,打开随机数或这些灯的存储模式。按任意一个指示灯将切换四个按钮的正方形,包括按下的按钮。

所以我正在寻找一种算法,如果我们可以关闭所有灯光,则返回true,如果我们不能这样做,则返回false。

1 个答案:

答案 0 :(得分:4)

每行和每列的灯光数量必须是均匀的(其中' 0'被视为'偶数')。

证明:假设您必须按2个水平相邻按钮。如果你从最左边开始,在最左边,无论你做什么,你最终都会打开一盏灯。另一方面,只要你有任意距离的2盏灯,你就可以移动'一个灯靠近另一个,直到它们相邻,此时你可以将它们都关闭。

对于垂直相邻按钮也是如此,并且对于2x2按钮网格也是如此:每当您关闭任何单个某些灯光时,其他切换确保数字每个行和每列的亮度保持为2的倍数。

例如,这是可以解决的:

solvable toggles

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

unsolvable toggles