我试图使游戏涉及到二维网格,给一些提示,玩家可以避免细胞含有爆炸性地雷我遇到了一个特殊的场景,给出了一些提示,我想知道有多少地雷的形成是可能的。
假设有一个二维矩阵。每个单元可能是空的,或者可能含有爆炸性地雷。
每个单元都有一些信息。如果单元格的值是
“E”:这意味着即使与这个细胞相邻的细胞中也没有地雷。
“O”:这意味着与此单元格相邻的单元格中没有地雷。
“N”:表示没有“E”或“O”的值它对周围环境和自身一无所知。
二维矩阵示例如下:
北
北
所有可能的阵型都不是16。
奥恩
奥恩
欧
所有可能的阵型都不是4。
这些是我手工计算的数值。我一直致力于编制一个高效的程序来计算网格维数为
最佳答案
基本上你需要解z/2上的方程组。其实这和玩一个叫熄灯的游戏很相似让我们以这块板为例。
O N
O N
O E
让我们为不同的董事会职位设定变量。
x11 x12
x21 x22
x31 x32
我们得到这样的方程。每个
O
变成一个类似于(sum of neighbor variables) = 1 (mod 2)
的方程。每个E
变成一个类似于(sum of neighbor variables) = 0 (mod 2)
的方程。x12 + x21 = 1 (mod 2)
x11 + x22 + x31 = 1 (mod 2)
x21 + x32 = 1 (mod 2) x22 + x31 = 0 (mod 2)
使用z/2上的高斯消去将这些方程放入row echelon form中。z/2很有趣,因为加和减没有区别。简而言之,我们反复选择一个出现在某个方程中的变量,将该方程添加到包含该变量的其他方程中,然后将该方程放在一边。我来示范一下。
x12 + x21 = 1
x11 + x22 + x31 = 1
x21 + x32 = 1
x22 + x31 = 0
----
为了使事情有趣,让我们在
x21
中选择x12 + x21 = 1
。x11 + x22 + x31 = 1
(x21 + x32) + (x12 + x21) = (1 + 1) ==> x12 + x32 = 0
x22 + x31 = 0
----
x12 + x21 = 1
注意
x21 + x21
和1 + 1
都简化为0
,因为我们正在工作mod 2
现在让我们在x22
中选择x11 + x22 + x31 = 1
。x12 + x32 = 0
(x22 + x31) + (x11 + x22 + x31) = (0 + 1) ==> x11 = 1
----
x12 + x21 = 1
x11 + x22 + x31 = 1
方程中所有的变量都是不同的,所以接下来的两个步骤很无聊。
----
x12 + x21 = 1
x11 + x22 + x31 = 1
x12 + x32 = 0
x11 = 1
我们有独立的方程,所以答案是解。有点无聊,但就是这样。
当我们简化方程时,会发生两件有趣的事情让我们考虑下一个板块。
E E
E E
我们得到以下方程式。
x12 + x21 = 1 x11 + x22 = 1
x11 + x22 = 1 x12 + x21 = 1
现在,让我们减少。
x12 + x21 = 1
x11 + x22 = 1
x11 + x22 = 1
x12 + x21 = 1
----
x11 + x22 = 1
x11 + x22 = 1
(x12 + x21) + (x12 + x21) = (1 + 1) ==> 0 = 0
----
x12 + x21 = 1
(x11 + x22) + (x11 + x22) = (1 + 1) ==> 0 = 0
0 = 0
----
x12 + x21 = 1
x11 + x22 = 1
我们得到了两个退化方程这意味着我们得到了多余的信息,它们不算作独立方程这里的答案是再次
4
。另一个可能发生的事情是我们得到一个方程
2^(3*2 - 4) = 4
。在这种情况下,没有与提示一致的解决方案。