个人信息
知乎:蓝桥杯python组备赛指南
蓝桥杯笔记:https://mbd.pub/o/bread/ZpWbmJ9x
CSDN主页:蓝桥杯python组备赛指南
python代码
import copy
data=[list(input()) for i in range(4) ]
ans=[]#最优方案
def get(x,y):
return 4*x+y
def turn_one(x,y):#灯泡的操作
if data[x][y]=='+':
data[x][y]='-'
else:
data[x][y]='+'
def turn_all(x,y):#行列
for i in range(4):
turn_one(i,y)
turn_one(x,i)
turn_one(x,y)#这一位置多翻转了一遍
for op in range(1<<16):
temp=[]
backup=copy.deepcopy(data)
for i in range(4):
for j in range(4):
if (op>>get(i,j))&1:
turn_all(i,j)
temp.append([i,j])#操作存起来
#判断所有灯泡是否有灭的
flag=False
for i in range(4):
for j in range(4):
if data[i][j]=='+':
flag=True
break
if flag==False:
if len(ans)==0 or len(ans)>len(temp):#没有合法方案,或当前方案更优
ans=copy.deepcopy(temp)
data=copy.deepcopy(backup)
print(len(ans))
for i in range(len(ans)):
print(f'{ans[i][0]+1} {ans[i][1]+1}')