Pagini recente » Cod sursa (job #1943067) | Cod sursa (job #1607057) | Cod sursa (job #2170370) | Cod sursa (job #566649) | Cod sursa (job #2279100)
#include <bits/stdc++.h>
#define DIM 15
using namespace std;
ifstream in("damesah.in");
ofstream out("damesah.out");
int n, sol[DIM], cont;
bool afisat;
bool coloana[DIM], diagonala_p[2*DIM], diagonala_s[2*DIM];
void golire( int x, int y )
{
sol[x] = 0;
coloana[y] = false;
diagonala_s[x + y] = false;
if( x <= y )
diagonala_p[y - x + n] = false;
else
diagonala_p[x - y] = false;
}
bool OK( int x, int y )
{
if( coloana[y] == true )
return false;
if( diagonala_s[x + y] == true )
return false;
if( x <= y )
{
if( diagonala_p[y - x + n] == true )
return false;
}
else
{
if( diagonala_p[x - y] == true )
return false;
}
return true;
}
bool plasare( int x, int y )
{
if( !OK(x, y) )
return false;
sol[x] = y;
coloana[y] = true;
diagonala_s[x + y] = true;
if( x <= y )
diagonala_p[y - x + n] = true;
else
diagonala_p[x - y] = true;
return true;
}
void afisare()
{
if(afisat)
return;
afisat = true;
for( int i = 1; i <= n; i++ )
out<<sol[i]<<" ";
out<<"\n";
}
void backt( int pas )
{
if( pas == n + 1 )
{
afisare();
cont++;
return;
}
for( int i = 1; i <= n; i++ )
if( plasare(pas, i) )
{
backt(pas + 1);
golire(pas, i);
}
}
int main()
{
in>>n;
backt(1);
out<<cont;
return 0;
}