Cod sursa(job #2377380)

Utilizator dan.ghitaDan Ghita dan.ghita Data 10 martie 2019 07:39:28
Problema Problema Damelor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("damesah.in");
ofstream g("damesah.out");

int n, a, b, solCnt;
int sol[15];
bool mainDiag[30], secDiag[30], col[30];

void print()
{
    for (int i = 0; i < n; ++i)
        g << sol[i] + 1 << ' ';
}

bool valid(int index)
{
    return !col[sol[index]] && !mainDiag[n - 1 + sol[index] - index] && !secDiag[sol[index] + index];
}

void bk(int index)
{
    for (sol[index] = 0; sol[index] < n; ++sol[index])
        if (valid(index))
            if (index == n - 1)
            {
                ++solCnt;
                if (solCnt == 1)
                    print();
            }
            else
            {
                col[sol[index]] = mainDiag[n - 1 + sol[index] - index] = secDiag[sol[index] + index] = true;
                bk(index + 1);
                col[sol[index]] = mainDiag[n - 1 + sol[index] - index] = secDiag[sol[index] + index] = false;
            }
}

int main()
{
    f >> n;

    bk(0);

    g << '\n' << solCnt;

    return 0;
}