Cod sursa(job #1480547)

Utilizator SagunistuStrimbu Alexandru Sagunistu Data 2 septembrie 2015 18:54:21
Problema Problema Damelor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>

using namespace std;

int n,a[20],nr;
bool ok=0;

int modul(int x)
{
    if(x<0)
        return -x;
    return x;
}

bool valid(int k)
{
    for(int i=1;i<k;i++)
    {
        if(a[k]==a[i])
            return 0;
        if(modul(i-a[i])==modul(k-a[k])||modul(i+a[k])==modul(k+a[i]))
            return 0;
    }
    return 1;
}

void afisare()
{
    nr++;
    if(!ok)
    {
        for(int i=1;i<=n;i++)
            printf("%d ",a[i]);
        ok=1;
        printf("\n");
    }
}

void bak(int k)
{
    for(int i=1;i<=n;i++)
    {
        a[k]=i;
        if(valid(k))
        {
            if(k==n)
                afisare();
            else
                bak(k+1);
        }
    }
}

int main()
{
    freopen("damesah.in","r",stdin);
    freopen("damesah.out","w",stdout);
    scanf("%d",&n);
    bak(1);
    printf("%d",nr);
    return 0;
}