Cod sursa(job #1483043)

Utilizator SagunistuStrimbu Alexandru Sagunistu Data 8 septembrie 2015 16:34:44
Problema Problema Damelor Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <cstdio>

using namespace std;

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

bool valid(int k)
{
    if(c[a[k]]==1)
        return 0;
    if(d1[k-a[k]+2]==1)
        return 0;
    if(d2[k+a[k]-2]==1)
        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
            {
                c[a[k]]=1;
                d1[k-a[k]+2]=1;
                d2[k+a[k]-2]=1;
                bak(k+1);
                c[a[k]]=0;
                d1[k-a[k]+2]=0;
                d2[k+a[k]-2]=0;
            }
        }
    }
}

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