Pagini recente » Cod sursa (job #1341463) | Cod sursa (job #785288) | Cod sursa (job #824644) | Cod sursa (job #33909) | Cod sursa (job #2168121)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("damesah.in");
ofstream fout ("damesah.out");
int v[ 20 ][ 20 ], n, afi, st[ 20 ], k;
int verificare ( int i, int j )
{
int iv, jv;
for ( iv = i, jv = j; iv >= 1 && jv >= 1; iv--, jv -- )
{
if ( v[ iv ][ jv ] == 1 )
{
return 0;
}
}
for ( iv = i, jv = j; iv <= n && jv <= n; iv ++, jv ++ )
{
if ( v[ iv ][ jv ] == 1 )
{
return 0;
}
}
for ( iv = i, jv = j; iv >= 1 && jv <= n; iv --, jv ++ )
{
if ( v[ iv ][ jv ] == 1 )
{
return 0;
}
}
for ( iv = i, jv = j; iv <= n && jv >= 1; iv ++, jv -- )
{
if ( v[ iv ][ jv ] == 1 )
{
return 0;
}
}
for ( iv = i; iv >= 1 ; iv -- )
{
if ( v[ iv ][ j ] == 1 )
{
return 0;
}
}
for ( iv = i; iv <= n; iv ++ )
{
if ( v[ iv ][ j ] == 1 )
{
return 0;
}
}
return 1;
}
void backtr ( int nivel )
{
int i;
if ( nivel > n )
{
if ( afi == 0 )
{
k ++;
afi = 1;
for ( i = 1; i <= n; i++ )
{
fout << st[ i ] << ' ';
}
fout << '\n';
}
else
{
k ++;
}
return;
}
for ( i = 1; i <= n; i++ )
{
if ( verificare ( nivel, i ) == 1 )
{
st[ nivel ] = i;
v[ nivel ][ i ] = 1;
backtr ( nivel + 1 );
v[ nivel ][ i ] = 0;
st[ nivel ] = 0;
}
}
}
int main ()
{
fin>> n;
backtr ( 1 );
fout << k;
}