熄灯游戏:按一下,点亮一片

5×5灯阵,按一盏会翻转它和上下左右。能否全部熄灭?这其实是 GF(2) 上解线性方程组——按错了用线性代数救场。

分类
组合游戏
难度
烧脑
标签
熄灯游戏、线性代数、GF(2)、方程组
熄灯游戏:按一下,点亮一片 · 漫画配图
漫画 · 熄灯游戏:按一下,点亮一片

题目

一个 5×55\times5 的灯阵,每盏灯亮或灭。按其中一盏,会翻转它自己以及上下左右相邻的灯(亮变灭、灭变亮)。给定初始亮灯图案,能否通过若干次按动,让所有灯全部熄灭

答案与解析

可以,而且这是一道线性代数题!在模 2 意义下(翻转两次=没翻),设 xij{0,1}x_{ij}\in\{0,1\} 表示是否按 (i,j)(i,j),每盏灯的最终状态是它自己和邻居被按次数的奇偶和。于是 25 盏灯给出 25 个方程: Ax=b(mod2)A\mathbf{x} = \mathbf{b} \pmod 2 其中 AA 是 25×25 的“影响矩阵”,b\mathbf{b} 是初始亮灯向量。问题等价于判断这个二元方程组是否有解。

经典 5×5 版中,矩阵 AA 的秩是 23,所以并非所有初始图案都能全灭(有 4 维的“不可解空间”);能全灭的图案恰占 223/225=1/42^{23}/2^{25}=1/4,且解不唯一——按法之间相差零空间里的“幻影模式”。

背后的数学

熄灯游戏(Lights Out,1995 年老虎电子玩具)是有限域 GF(2)\mathrm{GF}(2) 线性代数的绝佳教具。它把“玩游戏”翻译成“解模 2 方程组”,也连通了图论里的邻接矩阵与编码理论。手机上那些“翻转相邻格子”的益智游戏,骨子里都是同一套代数。