Pagini recente » Istoria paginii utilizator/ianosi_mark | Cod sursa (job #2017014) | Cod sursa (job #862956) | Cod sursa (job #1992091)
#include <iostream>
#include <fstream>
#include <Windows.h>
using namespace std;
const int nMax = 20;
ifstream in("damesah.in");
ofstream out("damesah.out");
int n;
int rasp;
bool vizLin[nMax];
bool vizCol[nMax];
bool vizDiagPrinc[2 * nMax];
bool vizDiagSec[2 * nMax];
int pos[nMax];
void backtr(int d)
{
if(d == n + 1)
{
if(rasp == 0)
for(int i = 1; i <= n; ++i)
out << pos[i] << " ";
++rasp;
return;
}
for(int i = d; i <= n; ++i)
for(int j = 1; j <= n; ++j)
if(vizLin[i] == false && vizCol[j] == false &&
vizDiagPrinc[i + j] == false && vizDiagSec[i - j + n] == false)
{
vizLin[i] = true;
vizCol[j] = true;
vizDiagPrinc[i+j] = true;
vizDiagSec[i-j+n] = true;
pos[i] = j;
backtr(d + 1);
vizLin[i] = false;
vizCol[j] = false;
vizDiagPrinc[i+j] = false;
vizDiagSec[i-j+n] = false;
}
}
int main()
{
in >> n;
backtr(1);
out << "\n" << rasp;
return 0;
}