Cod sursa(job #1193866)

Utilizator ZenusTudor Costin Razvan Zenus Data 2 iunie 2014 07:24:18
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <cstdio>

using namespace std;

#define NMAX 100

int N,ans;
int Linie[NMAX],mainDiag[NMAX],secondDiag[NMAX],sol[NMAX];

void Write()
{
    for (int i=1;i<=N;++i) printf("%d ",sol[i]);
}

void back(int k)
{
    if (k>N)
    {
        ++ans ;
        if (ans==1) Write();
        return ;
    }

    for (int i=1;i<=N;++i)
    {
        if (mainDiag[(k-i)+15]) continue;
        if (secondDiag[k+i]) continue;
        if (Linie[i]) continue;

        Linie[i]=true;
        mainDiag[(k-i)+15]=true;
        secondDiag[k+i]=true;

        sol[k]=i;
        back(k+1);

        Linie[i]=false;
        mainDiag[(k-i)+15]=false;
        secondDiag[k+i]=false;
    }
}

int main()
{
    freopen("damesah.in","r",stdin);
    freopen("damesah.out","w",stdout);

    scanf("%d",&N);

    back(1);

    printf("\n%d\n",ans);

    return 0;
}