poj 1222 EXTENDED LIGHTS OUT

poj 1222 EXTENDED LIGHTS OUT

这题用的是暴力枚举第一排的情况,然后出解,听discuss里说能用高斯消去发,有空再试
#include  < stdio.h >
#include 
< string .h >

int  n;
int  data[ 10 ][ 10 ], t[ 10 ][ 10 ], da[ 10 ][ 10 ];
int  dir[ 4 ][ 2 ] = {{ 1 , 0 },{ 0 , 1 },{ - 1 , 0 },{ 0 , - 1 }};

void  turn( int  i,  int  j)
{
    t[i][j]
=! t[i][j];
    
int  x, y;
    
for  (  int  k  =   0 ; k  <   4 ; k ++  )
    {
        y
= i + dir[k][ 0 ];
        x
= j + dir[k][ 1 ];
        
if  (  0   <=  x  &&  x  <   6   &&   0   <=  y  &&  y  <   5 ) t[y][x] =! t[y][x];
    }
}
int  work()
{
    
int  i, j;
    
for  ( i  =   0 ; i  <   5 ; i ++  )
        
for  ( j  =   0 ; j  < 6 ; j ++  )
            t[i][j]
= data[i][j];
    
for  ( j  =   0 ; j  <   6 ; j ++  )
        
if  ( da[ 0 ][j] ) turn( 0 , j);
    
for  ( i  =   1 ; i  <   5 ; i ++  )
    {
        
for  ( j  =   0 ; j  < 6 ; j ++  )
        {
            
if  (t[i - 1 ][j])
            {
                turn(i, j);
                da[i][j]
= 1 ;
            }
        }
    }
    
for  ( i  =   0 ; i  <   5 ; i ++  )
        
for  ( j  =   0 ; j  <   6 ; j ++  )
            
if  ( t[i][j] )  return   0 ;
    
return   1 ;
}
void  print()
{
    
for  (  int  i  =   0 ; i  <   5 ; i ++  )
    {
        printf(
" %d " , da[i][ 0 ]);
        
for  (  int  j  =   1 ; j  <   6 ; j ++  )
            printf(
"  %d " , da[i][j]);
        putchar(
10 );
    }
}

int  main()
{
    scanf(
" %d " & n);
    
int  m, i, j, k, num;
    
for  ( m  =   1 ; m  <=  n; m ++  )
    {
        
for  ( i  =   0 ; i  <   5  ; i ++  )
            
for  ( j  =   0 ; j  <   6  ; j ++  )
                scanf(
" %d " , data[i] + j);
        printf(
" PUZZLE #%d\n " , m);
        
for  ( k  =   0 ; k  <   64 ; k ++  )
        {
            num
=  k;
            memset(da, 
0 sizeof (da));
            
for  ( j  =   0 ; j  <   6   &&  num; j ++  )
            {
                da[
0 ][j] = num & 1 ;
                num
= num >> 1 ;
            }
            
if  ( 1   ==  work())
                print();
        }
    }
    
return   0 ;
}

你可能感兴趣的:(poj 1222 EXTENDED LIGHTS OUT)