2304: Lights Out(枚举)

时间:2021-06-22 20:57:51

枚举第一行所有可能的的情况

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int map[6][7],maze[6][7],ans[6][7];
int dir[5][2]={0,0,1,0,0,1,0,-1,-1,0};
void press(int i,int j)
{
int x,y;
for(int k=0;k<5;k++)
{
x=i+dir[k][0];
y=j+dir[k][1];
if(x>=1&&x<=5&&y>=1&&y<=6)
maze[x][y]=!maze[x][y];
} }
void example()
{
for(int i=1;i<=64;i++)
{
memset(ans,0,sizeof(ans));
memcpy(maze, map, sizeof(map));
int t=i;
for(int j=6;j>=1;j--)
ans[1][j]=t&1,t>>=1;
for(int j=1;j<=6;j++)
if(ans[1][j])
press(1,j);
for(int row=2;row<=5;row++)
for(int j=1;j<=6;j++)
if(maze[row-1][j])
press(row,j),ans[row][j]=1;
int flag=1;
for(int j=1;j<=6;j++)
if(maze[5][j])
{flag=0;break;}
if(flag)
return ;
}
}
int main ()
{
int t;
scanf("%d",&t);
while(t--)
{
for(int i=1;i<=5;i++)
for(int j=1;j<=6;j++)
cin>>map[i][j];
example();
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++)
printf("%d ",ans[i][j]);
printf("%d\n",ans[i][6]);
}
printf("\n"); } return 0;
}