Untitled
unknown
plain_text
3 years ago
1.1 kB
4
Indexable
#include <iostream>
#define N 51
using namespace std;
char a[5][5];
int b[5][5];
int ans;
void doc()
{
ans=17;
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)cin>>a[i][j];
}
int x[N];
int hx[]={0,-1,0,1};
int hy[]={-1,0,1,0};
void doi(int i)
{
int u=(i-1)/4+1;
int v=(i-1)%4+1;
b[u][v]=(b[u][v]+1)%2;
for(int i=0;i<4;i++)
{
int uu=u+hx[i];
int vv=v+hy[i];
if(uu>0&&uu<=4&&vv>0&&vv<=4)b[uu][vv]=(b[uu][vv]+1)%2;
}
}
void backtrack(int u,int sum)
{
if(u==17)
{
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++){if(a[i][j]=='b')b[i][j]=1;else b[i][j]=0;}
for(int i=1;i<=16;i++)if(x[i])
{
doi(i);
}
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)if(b[i][j]!=b[1][1])goto lan;
if(ans>sum)ans=sum;
lan:;
return;
}
if(sum<ans){x[u]=0;backtrack(u+1,sum);}
if(sum+1<ans){x[u]=1;backtrack(u+1,sum+1);}
}
int main()
{
//freopen("input.txt","r",stdin);
int TC;
cin>>TC;
for(int tc=1;tc<=TC;tc++)
{
doc();
backtrack(1,0);
if(ans==17)cout<<"Case #"<<tc<<"\n"<<"impossible"<<"\n";else
cout<<"Case #"<<tc<<"\n"<<ans<<"\n";
}
return 0;
}Editor is loading...