个人信息
知乎:蓝桥杯python组备赛指南
蓝桥杯笔记:https://mbd.pub/o/bread/ZpWbmJ9x
CSDN主页:蓝桥杯python组备赛指南
python代码
import copy
# 主程序入口
n = int(input()) # 输入测试用例的数量
# 反转函数,传入data和位置(x, y)
def turn(data, x, y):
dx = [0, 1, -1, 0, 0]
dy = [0, 0, 0, 1, -1]
for i in range(5): # 遍历5个方向
xx = x + dx[i]
yy = y + dy[i]
if xx < 0 or xx >= 5 or yy < 0 or yy >= 5:
continue # 越界跳过
data[xx][yy] = 1 - data[xx][yy] # 反转灯的状态
for _ in range(n):
# 输入数据
ans=10
data = [list(map(int, input().strip())) for i in range(5)]
backup=copy.deepcopy(data)#备份
for op in range(32):
step=0
for j in range(5):#对第一行枚举,以及相应周围灯的变化
if (op>>j)&1:
step+=1
turn(data,0,j)
for row in range(4):#对第二行以后操作
for column in range(5):
if data[row][column]==0:
step+=1
turn(data,row+1,column)
# 判断最后一行
flag = 0
for i in range(5):
if data[4][i] == 0: # 如果最后一行有灭的灯
flag = 1
break
# 如果最后一行全亮,更新最小操作次数
if flag == 0:
ans = min(ans, step)
# 恢复原始数据
data = copy.deepcopy(backup)
# 如果操作次数大于6,输出-1
if ans > 6:
ans = -1
print(ans)
try:#处理空格问题
input()
except EOFError:
break