# 1)Python深拷贝
import copy
backup = copy.deepcopy(g)
# 2) 将不含空格的字符串输入转化成int型的数组
g = []
for i in range(5):
g.append(list(map(int, input())))
# 3) 全局变量 global 的使用
三、完整代码
import copy # 导入copy模块,在后面会用到深拷贝
inf = float('inf')
def turn(x: int, y: int) -> None: # 开灯操作
for i in range(5): # 控制方向
a = x + dx[i]
b = y + dy[i]
if 0 <= a < 5 and 0 <= b < 5:
g[a][b] ^= 1 # 在合法的位置,进行异或操作改变灯的状态
def solve():
global g # 注意要把数组g设置成全局变量(之前找了好久都没发现这个错误)
res = inf # 初始化结果为极大值
backup = copy.deepcopy(g) # 对灯的状态深拷贝
for pos in range(1 << 5): # 遍历第一行的情况
step = 0 # 初始化步数为0
for j in range(5): # 遍历5个位置
if pos >> j & 1: # 对第pos种情况的第j位进行判断,如果是1(灯亮着),就要把灯先关掉
step += 1 # 更新步数
turn(0, j) # 关灯
for i in range(4): # 遍历前4行
for j in range(5): # 遍历每行的5盏灯
if g[i][j] == 0: # 灯是关的就把下一行同一列的灯进行开或关的操做
step += 1 # 更新步数
turn(i + 1, j) # 改变灯的状态
flag = True # 判断最后一行灯情况的标志
for j in range(5): # 遍历5盏灯
if g[4][j] == 0: # 存在关着的灯
flag = False # 改变标志
break # 终止
if flag: # 灯全是亮的
res = min(res, step) # 取最小步骤
g = copy.deepcopy(backup) # 还原状态数组g,进行下一种可能的计算
if res > 6: # 步数超过6
res = -1
print(res) # 输出最终结果
if __name__ == '__main__':
# 方向数组
dx = [0, 1, -1, 0, 0]
dy = [0, 0, 0, 1, -1]
n = int(input())
for k in range(n):
g = []
for j in range(5):
g.append(list(map(int, input()))) # 将无空格的字符串转化成int型的数组
if k != n - 1: # 每读入5 行吸收一个回车
line = input()
solve()