2304: Lights Out(枚举)

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

#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
",ans[i][6]);
        }
        printf("
");
        
    }
    
    return 0;
}


想的太多,做的太少。
原文地址:https://www.cnblogs.com/pealicx/p/6115665.html