Cod sursa(job #1730870)

Utilizator jurjstyleJurj Andrei jurjstyle Data 17 iulie 2016 19:15:17
Problema Problema Damelor Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>

using namespace std ;

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

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

int di[] = { -1 , -1 , 1 , 1 } ,
    dj[] = { -1 , 1 , -1 , 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 )
{
 if ( x[i] || y[j] )
    return 0 ;
 int ok = 1 , cnt = 1 ;
 while ( ok && cnt <= n )
    {
     for ( int k = 0 ; k < 4 ; ++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 j = 1 ; j <= n ; ++j )
        if ( a[k][j] == 0 )
            if ( ok ( k , j ) )
                {
                 a[k][j] = 1 , x[k] = 1 , y[j] = 1 ;
                 back ( k + 1 ) ;
                 a[k][j] = 0 , x[k] = 0 , y[j] = 0 ;
                }
    }
}

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