熄灯谜题:这个问题叫什么,怎么解决? (网格)

时间:2016-05-23 13:39:30

标签: 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))我们可以制定一些条件使它更快但对我来说仍然很慢。

你能告诉我这个问题的名称是什么,它的算法是否优于排列?

2 个答案:

答案 0 :(得分:1)

这称为Lights Out Puzzle

除了排列算法,您还可以使用高斯消元法解决问题,如上面this问题的答案和Wolfram Alpha链接中所述。基本思想是设置一个表示所有可能的按下的矩阵和一个代表"灯的列向量。 (布尔值)并求解得到一组压力,将所有布尔值设置为假(熄灯)。您可以通过在要保留的灯光的列向量中翻转布尔值来调整此值来解决任意状态。

答案 1 :(得分:0)

这是查找nearest neighbours的简单形式,您只需找到邻居索引。

对于矩阵L(m * n)中坐标(x,y)中的项目A,邻域索引应按以下方式计算:

(min(m, x+1),y)
(max(0, x-1),y)
(x,min(n, y+1))
(x,max(0, y-1))