AcWing 95. 费解的开关
原题链接
中等
作者:
RP
,
2021-04-13 20:53:50
,
所有人可见
,
阅读 197
#include <bits/stdc++.h>
using namespace std;
const int N = 6;
char g[N][N],backup[N][N];
int res=10;
int dx[]={0,-1,0,1,0},dy[]={0,0,1,0,-1};
void turn(int x,int y){
for(int i=0;i<=4;i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx<0||nx>4||ny<0||ny>4){
continue;
}
g[nx][ny]^=1;
}
return;
}
int main(){
int T;
cin>>T;
while(T--){
for(int i=0;i<5;i++){
cin>>g[i];
}
res = 100;
for(int i=0;i<32;i++){
memcpy(backup,g,sizeof g);
int step = 0;
for(int j=0;j<5;j++){
if((i>>j)&1){
step++;
turn(0,j);
}
}
for(int m=0;m<4;m++){
for(int n=0;n<5;n++){
if(g[m][n]=='0'){
turn(m+1,n);
step++;
}
}
}
bool islight = true;
for(int j=0;j<5;j++){
if(g[4][j]=='0'){
islight = false;
break;
}
}
if(islight){
res = min(step,res);
}
memcpy(g,backup,sizeof backup);
}
if(res<=6){
cout<<res<<endl;
}else{
cout<<"-1"<<endl;
}
}
return 0;
}