#define LOCAL
#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
int origin[5][6],state[5][6],change[5][6];
void trans(int i,int j)
{
if(i==0&&j==0)
{
state[i][j]=1-state[i][j];
state[i+1][j]=1-state[i+1][j];
state[i][j+1]=1-state[i][j+1];
}
else if(i==0&&j==5)
{
state[i][j]=1-state[i][j];
state[i+1][j]=1-state[i+1][j];
state[i][j-1]=1-state[i][j-1];
}
else if(i==4&&j==0)
{
state[i][j]=1-state[i][j];
state[i-1][j]=1-state[i-1][j];
state[i][j+1]=1-state[i][j+1];
}
else if(i==4&&j==5)
{
state[i][j]=1-state[i][j];
state[i-1][j]=1-state[i-1][j];
state[i][j-1]=1-state[i][j-1];
}
else if(i==0)
{
state[i][j]=1-state[i][j];
state[i+1][j]=1-state[i+1][j];
state[i][j-1]=1-state[i][j-1];
state[i][j+1]=1-state[i][j+1];
}
else if(i==4)
{
state[i][j]=1-state[i][j];
state[i-1][j]=1-state[i-1][j];
state[i][j-1]=1-state[i][j-1];
state[i][j+1]=1-state[i][j+1];
}
else if(j==0)
{
state[i][j]=1-state[i][j];
state[i+1][j]=1-state[i+1][j];
state[i-1][j]=1-state[i-1][j];
state[i][j+1]=1-state[i][j+1];
}
else if(j==5)
{
state[i][j]=1-state[i][j];
state[i+1][j]=1-state[i+1][j];
state[i-1][j]=1-state[i-1][j];
state[i][j-1]=1-state[i][j-1];
}
else
{
state[i][j]=1-state[i][j];
state[i+1][j]=1-state[i+1][j];
state[i-1][j]=1-state[i-1][j];
state[i][j-1]=1-state[i][j-1];
state[i][j+1]=1-state[i][j+1];
}
}
void write(int n)
{
printf("PUZZLE #%d\n",n);
for(int i=0;i<5;i++)
{
for(int j=0;j<6;j++)
{
printf("%d ",change[i][j]);
}
printf("\n");
}
}
int main()
{
#ifdef LOCAL
freopen("/Users/wangkeyuan/i.txt","r",stdin);
freopen("/Users/wangkeyuan/o.txt","w",stdout);
#endif
int t,m;
cin>>t;m=t;
while(m--)
{
for(int i=0;i<5;i++)
for(int j=0;j<6;j++)
scanf("%d",&origin[i][j]);
memcpy(state,origin,sizeof(origin));
memset(change,0,sizeof(change));
for(change[0][0]=0;change[0][0]<=1;change[0][0]++)
for(change[1][0]=0;change[1][0]<=1;change[1][0]++)
for(change[2][0]=0;change[2][0]<=1;change[2][0]++)
for(change[3][0]=0;change[3][0]<=1;change[3][0]++)
for(change[4][0]=0;change[4][0]<=1;change[4][0]++)
{
memcpy(state,origin,sizeof(origin));
for(int j=1;j<6;j++)
for(int i=0;i<5;i++)
{
change[i][j]=0;
}
for(int i=0;i<5;i++)
{
if(change[i][0]==1)
{
trans(i,0);
}
}
for(int j=0;j<5;j++)
for(int i=0;i<5;i++)
{
if(state[i][j]==1)
{
change[i][j+1]=1;
trans(i,j+1);
}
}
int sum=0;
for(int i=0;i<5;i++)
sum+=state[i][5];
if(!sum)
{
write(t-m);
break;
}
}
}
}
POJ 1222 EXTENDED LIGHTS OUT(熄灯问题——枚举)
最新推荐文章于 2021-02-17 00:02:52 发布