Cod sursa(job #1233912)

Utilizator armandpredaPreda Armand armandpreda Data 26 septembrie 2014 12:39:22
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int n,sol[15],nr;

void back(int k);
bool next(int k);
bool ok(int k);
int main()
{
    freopen("damesah.in","r",stdin);
    freopen("damesah.out","w",stdout);
    scanf("%d",&n);
    back(1);
    printf("\n%d",nr);
    return 0;
}
void back(int k)
{
    sol[k]=0;
    if(k==n+1)
    {
        nr++;
        if(nr==1){for(int i=1;i<=n;++i)printf("%d ",sol[i]);}
    }
    else
    {
        while(next(k))
            if(ok(k))
                back(k+1);


    }
}
bool next(int k)
{
    if(sol[k]<n)
    {
        sol[k]++;
        return 1;
    }
    else
        return 0;
}
bool ok(int k)
{
    for(int i=1;i<k;++i)
        if(sol[i]==sol[k])
            return 0;
    for(int i=1;i<k;++i)
        if(k-i==abs(sol[k]-sol[i]))
            return 0;
    return 1;
}