Matrix 当只允许一次操作时,如何将4x4矩阵的所有条目设置为1或0?

Matrix 当只允许一次操作时,如何将4x4矩阵的所有条目设置为1或0?,matrix,xor,puzzle,Matrix,Xor,Puzzle,我有一个4x4矩阵。说 0 1 1 0 0 0 1 0 0 1 1 0 0 1 1 1 我的任务是将矩阵转换为 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 或 单个操作定义为拾取矩阵的任何元素,然后将元素及其左、右、上、下的元素替换为1的异或 范例 0 1 1 0 0 0 1 0 0 1 1 0 0 1 1 1 0 1 1 0 0 0 1 0 0 1 1 0 0 1 1 1 对标记元素的操作将矩阵转换为 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1

我有一个4x4矩阵。说

0 1 1 0
0 0 1 0
0 1 1 0
0 1 1 1
我的任务是将矩阵转换为

1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

单个操作定义为拾取矩阵的任何元素,然后将元素及其左、右、上、下的元素替换为1的异或

范例

0 1 1 0 0 0 1 0 0 1 1 0 0 1 1 1 0 1 1 0 0 0 1 0 0 1 1 0 0 1 1 1 对标记元素的操作将矩阵转换为

0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 我的目标是计算得到最终结果所需的最少操作次数


我甚至不明白这个问题属于哪一类?这是一个分支和边界,是跟踪还是其他什么。

您所描述的被称为。这是一个相关的例子,它为你提供了解决nxn正方形上所有的灯熄灭问题所需的最少的非平凡的开关翻转次数

Wikipedia描述了一个简单的例子。您可能还对这里感兴趣,它包括到示例实现的链接。引用答案:

其思想是建立一个表示按钮按下的矩阵和一个表示灯光的列向量,然后使用标准矩阵简化技术确定要按下的按钮。它以多项式时间运行,不需要任何回溯


我相信这可以通过回溯来解决;让
开关(i,j)
成为在
i
-th行和
j
-th列上执行的所述操作;当所有元素都是
1
0
时,递归结束。对于给定的配置,所需的最小操作数是所有
i
j
执行
开关(i,j)
后的最小操作数加上
i
。但是,必须执行一些循环检测-如果以前发生过配置,则必须跟踪分支。问题可能重复。 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1