Pagini recente » Cod sursa (job #1049866) | Cod sursa (job #2360899) | Cod sursa (job #2863237) | Cod sursa (job #1672326) | Cod sursa (job #1743819)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("damesah.in");
ofstream out("damesah.out");
const int maxn = 40;
int col[maxn], reg[maxn][maxn];
int principala[maxn];
int secundara[maxn];
int n, nr;
void mark(int l, int c)
{
col[c] = 1 - col[c];
principala[n + c - l] = 1 - principala[n + c - l];
secundara[l + c + 1] = 1 - secundara[l + c + 1];
}
void _back_(int lin)
{
if(lin == n + 1)
{
if(nr == 0)
{
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(reg[i][j] == 1)
out << j << " ";
out << "\n";
}
nr++;
}
else
{
for(int j = 1; j <= n; j++)
{
if(!col[j] && !principala[n + j - lin] && !secundara[lin + j + 1])
{
reg[lin][j] = 1;
mark(lin, j);
_back_(lin + 1);
reg[lin][j] = 0;
mark(lin, j);
}
}
}
}
int main()
{
in >> n;
_back_(1);
out << nr;
return 0;
}