Pagini recente » Cod sursa (job #3219867) | Cod sursa (job #2979314) | Cod sursa (job #2494648) | Cod sursa (job #2373161) | Cod sursa (job #1091733)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int Nmax = 50;
const int nr_solutii[] = { 0,1,0,0,2,10,4,40,92,352,724,2680,14200,73712,365596,2279184 };
int N, nr_sol;
int st[Nmax];
int uz[Nmax], uzdl[Nmax * 2], uzdc[Nmax * 2];
#define uzdl (uzdl+Nmax)
ofstream g("damesah.out");
void print()
{
if ( nr_sol < 3 )
{
for ( int i = 1; i <= N; ++i )
g << st[i] << " ";
g << "\n";
}
nr_sol++;
}
void back( int k )
{
if ( nr_sol >= 1 )
return;
if ( k > N )
print();
else
for ( int i = 1; i <= N; ++i )
{
if ( !uz[i] && !uzdl[k - i] && !uzdc[k + i] )
{
uz[i] = 1;
uzdl[k - i] = 1;
uzdc[k + i] = 1;
st[k] = i;
back( k + 1 );
uz[i] = 0;
uzdl[k - i] = 0;
uzdc[k + i] = 0;
}
}
}
int main()
{
ifstream f("damesah.in");
f >> N;
back( 1 );
g << nr_solutii[N] << "\n";
f.close();
g.close();
return 0;
}