acwing.95.费解的开关

费解的开关

#include
#include
#include
#include
using namespace std;
const int N=6;
char a[N][N],backup[N][N];

int ax[N]={0,0,0,1,-1};
int bx[N]={0,1,-1,0,0};

void turn(int x,int y)
{
    for(int i=0;i<5;i++)
    {
    int b=x+ax[i],c=y+bx[i];
    if(c<0||c>4||b<0||b>4)  continue; 
    
        a[b][c]^=1;
    
        
        
    }
}

int main()
{
    int T;
    cin>>T;
    
    while(T--)
    {
       
        for(int i=0;i<5;i++) cin>>a[i];
         int t=10;
        for(int op=0;op<=31;op++)
        {
            int res=0;
            memcpy(backup,a,sizeof a);
            for(int i=0;i<5;i++)
            {
                if(op>>i&1)
                {
                    turn(0,i);
                    res++;
                }
            }
            for(int m=0;m<4;m++)
                for(int n=0;n<5;n++)
                
                if(a[m][n]=='0') 
                {
                    turn(m+1,n);
                    res++;
                }
            bool dark=false;
            for(int i=0;i<5;i++) 
                if(a[4][i]=='0') 
                {
                    dark=true;
                    break;
                }
                
                if(dark==false) t=min(t,res);
    
            memcpy(a,backup,sizeof a);
        }
        if(t>6) t=-1;
        cout<<t<<endl;
    }

}

你可能感兴趣的:(acwing.95.费解的开关)