Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 一个版本的熄灯游戏的可解性_Algorithm_Solver - Fatal编程技术网

Algorithm 一个版本的熄灯游戏的可解性

Algorithm 一个版本的熄灯游戏的可解性,algorithm,solver,Algorithm,Solver,我试图为一个游戏算法创建一个可解函数。基本上是一个函数,如果给定的游戏是可解的或不可解的,则返回true或false 这个游戏是一种熄灯游戏。基本上你有一个M*N的按钮网格。当游戏开始时,一个随机数或这些灯的存储模式被打开。按下任何一个灯都将切换四个按钮组成的正方形,包括按下的按钮 因此,我正在寻找一种算法,如果我们可以关闭所有灯光,它将返回true;如果我们不能关闭所有灯光,它将返回false。每行和每列中打开的灯光数必须为偶数(其中“0”也被视为“偶数”) 证明:假设您必须按两个水平相邻的按

我试图为一个游戏算法创建一个可解函数。基本上是一个函数,如果给定的游戏是可解的或不可解的,则返回true或false

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


因此,我正在寻找一种算法,如果我们可以关闭所有灯光,它将返回true;如果我们不能关闭所有灯光,它将返回false。

每行和每列中打开的灯光数必须为偶数(其中“0”也被视为“偶数”)

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

垂直相邻的按钮也是如此,扩展到2x2按钮网格:无论何时关闭任何单个特定灯光,其他切换都确保每行和每列的打开灯光数保持为2的倍数

例如,这是可以解决的:

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


“四的平方,包括按下的按钮”——还有其他限制吗?对于不在边上的按钮,有四个可能的“4的正方形”。没有其他约束,这四个可能的4的正方形之间没有区别。我不明白。如何确定相对于按下的按钮,4的哪个正方形被切换?让我们这样说,我们有一只大手,在每一步中,我们一起按下4个按钮的正方形,而不是一个。或者,在每一步中,我们选择一个四个按钮的正方形,并切换其按钮+1的状态。不过,如果你也证明这个可解性标准是充分和必要的(即,你的动画中演示的有条理的解决方法确实解决了所有满足该标准的电路板),那么你的答案可能会更好。@Ilmari:我简单地考虑过。。。但是我的数学不足以扩展它!我尝试了一些完全随机的电路板,但找不到反例,所以至少我的逻辑是启发式的。@Jongware你用什么来创建这些GIF?