Cod sursa(job #1104797)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 11 februarie 2014 00:26:07
Problema Problema Damelor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

using namespace std;

const int NMax = 16;

int n;
int ans[NMax];
int nrans;
int st[NMax];
bool column[NMax], diag_p[NMax + NMax], diag_s[NMax + NMax];

inline void back(const int k)
{
    if (k == n+1)
    {
        if (++nrans == 1)
            for (int i = 1; i<=n; ++i)
                ans[i] = st[i];
        return ;
    }
    for (int i = 1; i<=n; ++i)
    {
        /// vreau sa pun pe linia k si coloana i o dama
        if (!column[i] && !diag_p[-i+k+n] && !diag_s[i+k-1])
        {
            st[k] = i;
            column[i] = diag_p[-i+k+n] = diag_s[i+k-1] = true;
            back(k+1);
            column[i] = diag_p[-i+k+n] = diag_s[i+k-1] = false;
        }
    }
}

int main()
{
    ifstream f("damesah.in");
    f>>n;
    f.close();
    back(1);
    ofstream g("damesah.out");
    for (int i = 1; i<=n; ++i)
        g<<ans[i]<<" ";
    g<<"\n"<<nrans<<"\n";
    g.close();
    return 0;
}