递推与递归1:费解的开关
作者:
总打瞌睡的天天啊
,
2024-08-04 09:54:29
,
所有人可见
,
阅读 5
#include<iostream>
#include<cstring>
using namespace std;
const int N=6;
char g[N][N],bg[N][N];
int dx[5]={0,1,0,-1,0},dy[5]={1,0,-1,0,0};
void turn(int x,int y)
{
for(int i=0;i<5;i++)
{
int a=x+dx[i],b=y+dy[i];
if(a<0||a>=5||b<0||b>=5)continue;
g[a][b]^=1;
}
return ;
}
int main()
{
int n;
cin>>n;
while(n--)
{
for(int i=0;i<5;i++)cin>>bg[i];
int res=100;
for(int op=0;op<32;op++)
{
int cnt=0;
memcpy(g,bg,sizeof g);
for(int j=0;j<5;j++)
if(op>>j&1)
{
turn(0,j);
cnt++;
}
for(int i=0;i<4;i++)
for(int j=0;j<5;j++)
if(g[i][j]=='0')
{
turn(i+1,j);
cnt++;
}
bool success=true;
for(int i=0;i<5;i++)
if(g[4][i]=='0')success=false;
if(success&&res>cnt)res=cnt;
}
if(res>6)res=-1;
cout<<res<<endl;
}
return 0;
}