Cod sursa(job #1730867)

Utilizator jurjstyleJurj Andrei jurjstyle Data 17 iulie 2016 19:10:57
Problema Problema Damelor Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>

using namespace std ;

ifstream f ("damesah.in") ;
ofstream g ("damesah.out") ;

int n , a[15][15] , nr_sol , x[15] ;

int di[] = { -1 , -1 , -1 , 0 , 0 , 1 , 1 , 1  } ,
    dj[] = { -1 ,  0 , 1  , -1 , 1 , -1 , 0 , 1 } ;

void afis ()
{
 ++nr_sol ;
 if ( nr_sol == 1 )
     {
      for ( int i = 1 ; i <= n ; ++i )
         for ( int j = 1 ; j <= n ; ++j )
            if ( a[i][j] )
                g << j << " " ;
      g << "\n" ;
     }
}

int ok ( int i , int j )
{
 int ok = 1 , cnt = 1 ;
 while ( ok && cnt <= n )
    {
     for ( int k = 0 ; k < 9 ; ++k )
        {
         int ii = i + cnt * di[k] , jj = j + cnt * dj[k] ;
         if ( ii > 0 && ii <= n && jj > 0 && jj <= n )
            if ( a[ii][jj] )
                ok = 0 ;
        }
     ++cnt ;
    }
 return ok ;
}

void back ( int k )
{
 if ( k == n + 1 )
    afis () ;
 else if ( k <= n )
    {
     for ( int i = 1 ; i <= n ; ++i )
        for ( int j = 1 ; j <= n ; ++j )
            if ( a[i][j] == 0 )
                if ( i > x[k-1] )
                    if ( ok ( i , j ) )
                        {
                         a[i][j] = 1 ;
                         x[k] = i ;
                         back ( k + 1 ) ;
                         x[k] = 0 ;
                         a[i][j] = 0 ;
                        }
    }
}

int main ()
{
 f >> n ;
 back ( 1 ) ;
 g << nr_sol ;
}