Cod sursa(job #1992091)

Utilizator Mihai_PredaPreda Mihai Dragos Mihai_Preda Data 19 iunie 2017 13:34:12
Problema Problema Damelor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#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;
}