Cod sursa(job #1204368)

Utilizator EpictetStamatin Cristian Epictet Data 2 iulie 2014 19:08:49
Problema Problema Damelor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
int n, nr, k, x[20];
bool c[20], dp[40], ds[40];

inline void afis()
{
    nr++;
    if (nr == 1)
    {
        for (int i=1; i<=n; i++) fout << x[i] << ' ';
    }
}

inline int cont (int k)
{
    if (c[x[k]]) return 0;
    if (dp[n + k - x[k]]) return 0;
    if (ds[k + x[k]]) return 0;
    return 1;
}


inline int backtrack(int k)
{
    for (int i=1; i<=n; i++)
    {
        x[k] = i;
        if (cont (k))
        {
            c[x[k]] = dp[n + k - x[k]] = ds[k + x[k]] = 1;
            if (k == n) afis();
            else backtrack(k + 1);
            c[x[k]] = dp[n + k - x[k]] = ds[k + x[k]] = 0;
        }
    }
}

int main()
{
    fin >> n;
    backtrack(1);
    fout << '\n' << nr << '\n';
    fout.close();
    return 0;
}