algorithm - Lights out puzzle : what is this pro. blem调用,如何解决呢? (网格)

标签 algorithm matrix permutation

我有 MATRIX(m*n) 填充 bool 值(0 或 1)

当我们将 x,y 定位在位置附近时,中心将反转 (x,y),(x+1,y),(x-1,y),(x,y+1),(x,y- 1)

我们必须按下某个位置,使其转换为我们想要的某个矩阵

11111                   1-111                   1-1-1                  1-1-1
11111   press(2,2)->    ---11    press(2,4)->   --1--   press(3,2)->   -11--
11111                   1-111                   1-1-1                  -1--1
11111                   11111                   11111                  1-111

这个问题可以使用排列,但它太慢了 O(2^(n*m)) 我们可以制定一些条件使其更快,但对我来说它仍然很慢。

你能告诉我这个问题的名称是什么吗?它的算法是否比排列更好?

最佳答案

这叫做 Lights Out Puzzle .

除了排列算法之外,您还可以使用高斯消去法解决问题,如 this 的答案中所述。问题和上面的 Wolfram Alpha 链接。基本思想是建立一个代表所有可能按下的矩阵和一个代表“灯”( bool 值)的列向量,并解决以获得一组按下以将所有 bool 值设置为假(熄灯)。您可以调整它来解决任意状态,只需翻转列向量中的 bool 值,以获得您想要保持亮起的灯。

关于algorithm - Lights out puzzle : what is this pro. blem调用,如何解决呢? (网格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37392590/

相关文章:

java - 如何使用 Canvas 围绕中心点旋转位图?

python - 如何生成几个字母所有可能排列的列表?

r - 使用堆算法生成排列

arrays - 沿一维数组移动

algorithm - 给定二进制 MxN 矩阵和切换列的能力,最大化行相同性?

c++ - 如何用预制数据初始化指向指针的指针?

algorithm - 无可容许启发式的最优搜索算法

algorithm - 如何从数组中获取 X 个最大值

algorithm - 在 O(n log n) 时间内计算数组中的出现次数

java - 如何求函数值域?