#P1521. EXTENDED LIGHTS OUT
EXTENDED LIGHTS OUT
题目描述
在 Lights Out 游戏的扩展版本中,是一个有 行每行 个按钮的谜题(实际的谜题有 行每行 个按钮)。每个按钮都有一个灯。当按下按钮时,该按钮及其上方、下方、右侧和左侧的每个(最多四个)相邻按钮的灯状态会反转。 (如果打开,灯关闭;如果关闭,灯打开。)角落的按钮改变个按钮的状态;边缘的按钮改变个按钮的状态,其他按钮改变个的状态。例如,如果按下下方左侧标记为的按钮,则显示将变为右侧的图像。

游戏的目标是,从显示器上的任何一组初始灯开始,按下按钮使显示器进入所有灯都关闭的状态。当相邻按钮被按下时,一个按钮的动作可以撤销另一个按钮的效果。例如,在下面的显示中,按下左侧显示中标记为 的按钮会导致右侧显示。注意,第 行第 列和第 行第 列的按钮都改变了第 行第 列按钮的状态,所以最后,它的状态是不变的。

笔记:
- 按下按钮的顺序无关紧要。
- 如果第二次按下按钮,它会完全取消第一次按下的效果,因此不需要多次按下按钮。
- 如第二张图所示,按下第二排对应的按钮,可以关闭第一排的所有灯。通过在每一行重复这个过程,第一行中的所有灯 可能会出现四行。类似地,通过按下第 列中的按钮,可以关闭前 列中的所有灯。 编写一个程序来解决这个难题。
输入描述:
输入的第一行是一个正整数 ,表示谜题个数。每个谜题将有行,每行有个数: 或 ,由一个空格分隔。 表示最初灯关闭,而 1 表示最初灯打开。
输出描述:
对于每个谜题,输出: 第一行带有字符串:“PUZZLE #m”,其中 𝑚 表示第 𝑚个谜题。在该行之后,是一个类似拼图的显示(与输入格式相同)。在这种情况下, 表示必须按下才能解谜的按钮,而 表示未按下的按钮。在类似拼图的输出显示中,每个 0 或 1 之间应该正好有一个空格。
示例1
2
0 1 1 0 1 0
1 0 0 1 1 1
0 0 1 0 0 1
1 0 0 1 0 1
0 1 1 1 0 0
0 0 1 0 1 0
1 0 1 0 1 1
0 0 1 0 1 1
1 0 1 1 0 0
0 1 0 1 0 0
PUZZLE #1
1 0 1 0 0 1
1 1 0 1 0 1
0 0 1 0 1 1
1 0 0 1 0 0
0 1 0 0 0 0
PUZZLE #2
1 0 0 1 1 1
1 1 0 0 0 0
0 0 0 1 0 0
1 1 0 1 0 1
1 0 1 1 0 1