Cod sursa(job #1248542)

Utilizator hopingsteamMatraguna Mihai-Alexandru hopingsteam Data 25 octombrie 2014 14:35:15
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include    <iostream>
#include    <fstream>
#include    <cmath>

using namespace std;

ifstream fin("damesah.in");
ofstream fout("damesah.out");

int N;
int X[13];

void Show(int n)
{
    for (int i = 1; i <= n; i++)
    {
        fout << X[i] << " ";
    }
    fout << "\n";
}

bool isValid(int k)
{
    for (int i = 1; i < k; i++)
    {
        if ((X[k] == X[i]) || (k - i == abs(X[k] - X[i])))
        {
            return false;
        }
    }
    return true;
}

void Backtrack(int n)
{
    int ok, k;
    k = 1;
    X[k] = 0;
    int Total = 0, first = 1;
    while (k > 0)
    {
        ok = 0;
        while ((X[k] < n) && (!ok))
        {
            X[k]++;
            ok = isValid(k);
        }
        if (!ok)
        {
            k--;
        }
        else
        {
            if (k == n)
            {
                if(first)
                {
                    Show(n);
                    first = 0;
                }
                Total++;
            }
            else
            {
                k++;
                X[k] = 0;
            }
        }
    }
    fout << Total << "\n";
}
void Read()
{
    fin >> N;
    Backtrack(N);
}

int main()
{
    Read();
    return 0;
}