Cod sursa(job #2147321)

Utilizator UnseenMarksmanDavid Catalin UnseenMarksman Data 28 februarie 2018 17:22:00
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include <cmath>

using namespace std;

int n,cnt,sol[15];
bool ok, used[15];

bool valid(int k)
{
    for(int i=1; i<k; i++)
    {
        if(abs(sol[k]-sol[i])==abs(k-i)) return false;
    }
    return true;
}

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

void backtracking(int k)
{
    if(k==n+1)
    {
        write();
    }
    else
    {
        for(sol[k]=1; sol[k]<=n; sol[k]++)
        {
            if(!used[sol[k]]&&valid(k))
            {
                used[sol[k]]=1;
                backtracking(k+1);
                used[sol[k]]=0;
            }
        }
    }
}

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