Cod sursa(job #1240546)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 11 octombrie 2014 16:33:45
Problema Problema Damelor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <fstream>
#include <string.h>
#define NMax 15
using namespace std;
ifstream f("damesah.in");
ofstream g("damesah.out");
int n, col[NMax], sol[NMax], nrsol, ok, viz[NMax];
int ver()
{
    int l[NMax], c[NMax], ds[NMax], dp[NMax];
    memset (l, 0, sizeof(l));
    memset (c, 0, sizeof(c));
    memset (dp, 0, sizeof(dp));
    memset (ds, 0, sizeof(ds));
    for (int i=1; i<=n; i++) {
        if (l[i] == 0)
            l[i]=1;
        else
            return 0;
        if (c[col[i]] == 0)
            c[col[i]]=1;
        else
            return 0;
        if (dp[i+col[i]-1] == 0)
            dp[i+col[i]-1]=1;
        else
            return 0;
        if (ds[i+n-col[i]] == 0)
            ds[i+n-col[i]]=1;
        else
            return 0;
    }
    return 1;
}
void back(int k)
{
    for (int i=1; i<=n; i++) {
        if (viz[i]==0) {
            viz[i]=1;
            col[k]=i;
            if (k==n) {
                if(ver()) {
                    if (ok==0)
                        for (int i=1; i<=n; i++)
                            sol[i]=col[i];
                    nrsol++;
                    ok=1;
                }
            }
            else
                back(k+1);
            viz[i]=0;
        }
    }
}
int main()
{
    f>>n;
    back(1);
    for (int i=1; i<=n; i++)
        g<<sol[i]<<" ";
    g<<"\n";
    g<<nrsol;
    return 0;
}