poj1222

来源:互联网 发布:爱因斯坦 大学 知乎 编辑:程序博客网 时间:2024/05/22 03:08
#include <iostream>#include<cstdio>#include<algorithm>using namespace std;int m[5][6],ans[5][6],n,cnt,f[6],c[5][6];int dx[5]={0,0,1,-1,0},dy[5]={1,-1,0,0,0};void res(int x,int y){    if(c[x][y])        c[x][y]=0;    else c[x][y]=1;}void turn(int x,int y){    for(int i=0;i<=4;i++)    {        int nx=x+dx[i],ny=y+dy[i];        if(nx>=0&&nx<5&&ny>=0&&ny<6)        res(nx,ny);    }}void print(){    printf("PUZZLE #%d\n",cnt);    for(int i=0;i<5;i++)    {        for(int j=0;j<6;j++)        printf("%d%c",ans[i][j],j==5?'\n':' ');    }}int main(){    scanf("%d",&n);    cnt=0;    f[0]=1;    for(int i=1;i<6;i++)        f[i]=f[i-1]*2;    while(n--)    {        cnt++;        for(int i=0;i<5;i++)            for(int j=0;j<6;j++)            scanf("%d",&m[i][j]);        int num=0;        for(int i=0;i<64;i++)        {            for(int ii=0;ii<5;ii++)                for(int j=0;j<6;j++)                c[ii][j]=m[ii][j];            for(int j=0;j<6;j++)            {                if(i&f[j])                {                     ans[0][j]=1;  turn(0,j);                }                else                    ans[0][j]=0;            }             for(int ii=1;ii<5;ii++)             {                 for(int j=0;j<6;j++)                 {                     if(c[ii-1][j])                     {                         ans[ii][j]=1;                         turn(ii,j);                     }                     else ans[ii][j]=0;                 }             }             bool ok=true;             for(int j=0;j<6;j++)                if(c[4][j])                    ok=false;                if(ok)                    print();        }    }    return 0;}

0 0
原创粉丝点击