题目详情
解题代码
#include<iostream>
#include<cstring>
using namespace std;
const int N = 10;
char g[N][N],backup[N][N];
int dx[5]={1,0,-1,0,0},dy[5]={0,-1,0,1,0};
int n;
void turn(int x,int y)
{
for(int i=0;i<5;i++)
{
int a=x+dx[i],b=y+dy[i];
if(a>-1 && a<5 && b >-1 && b <5) g[a][b] ^= 1;
}
}
int main()
{
cin >> n;
while(n--)
{
int ans =10;
for(int i=0;i<5;i++) cin >> g[i];
for(int op=0;op<32;op++)
{
int step = 0;
memcpy(backup,g,sizeof g);
for(int j=0;j<5;j++)
if(op&(1<<j))
{
turn(0,j);
step++;
}
for(int i=1;i<5;i++)
for(int j=0;j<5;j++)
{
if(g[i-1][j]=='0')
{
turn(i,j);
step++;
}
}
bool flag=true;
for(int j=0;j<5;j++)
if(g[4][j]=='0') flag =false;
if(flag) ans = min(ans,step);
memcpy(g,backup,sizeof g);
}
if(ans<=6) cout << ans <<endl;
else cout << "-1"<<endl;
}
return 0;
}