Cod sursa(job #1246625)

Utilizator japjappedulapPotra Vlad japjappedulap Data 21 octombrie 2014 13:43:14
Problema Problema Damelor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#include <cmath>
using namespace std;

ifstream is ("damesah.in");
ofstream os ("damesah.out");

int N, x[15], sol;
bool b;

void Dame(int k);
void Write();
bool OK(int k);

int main()
{
    is >> N;
    Dame(1);
    os << sol;
    is.close();
    os.close();
}

void Dame(int k)
{
    if (k > N)
    {
        if (b == 0)
            Write(), b = 1;
        return;
    }
    for (int i = 1; i <= N; ++i)
    {
        x[k] = i;
        if (OK(k)) Dame(k+1);
    }
};

bool OK(int k)
{
    for (int i = k-1; i > 0; --i)
    {
        if (x[i] == x[k]) return false;
        if (abs(x[k]-x[i]) == k-i) return false;
    }
    return true;
};

void Write()
{
    for (int i = 1; i <= N; ++i)
        os << x[i] << ' ';
    sol++;
    os << '\n';
};