题目:95. 费解的开关
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5+10;
char a[10][10],b[10][10];
int fx[5]={0,-1,1,0,0};
int fy[5]={0,0,0,-1,1};
void turn_one(int x,int y){
if(b[x][y]=='0')
b[x][y]='1';
else
b[x][y]='0';
}
void turn_all(int x,int y){
for(int i=0;i<5;i++){
int xx=x+fx[i];
int yy=y+fy[i];
if(xx>=1&&xx<=5&&yy>=1&&yy<=5){
turn_one(xx,yy);
}
}
}
int main(){
int n;
cin>>n;
while(n--){
for(int i=1;i<=5;i++){
scanf("%s",a[i]+1);
}
int res=7;
for(int i=0;i<(1<<5);i++){
memcpy(b,a,sizeof(a));
int ans=0;
for(int j=0;j<5;j++){
if((i>>j)&1){
ans++;
turn_all(1,j+1);
}
}
for(int j=1;j<=4;j++){
for(int k=1;k<=5;k++){
if(b[j][k]=='0'){
ans++;
if(ans>6) break;
turn_all(j+1,k);
}
}
if(ans>6) break;
}
for(int j=1;j<=5;j++){
if(b[5][j]=='0'){
ans=10;
break;
}
}
if(ans<=6) res=min(res,ans);
// cout<<ans<<endl;
}
if(res<=6)
cout<<res<<endl;
else
cout<<"-1"<<endl;
}
return 0;
}