Cod sursa(job #1645115)

Utilizator theodor1289Theodor Amariucai theodor1289 Data 10 martie 2016 11:06:42
Problema Problema Damelor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
short n, tabla[15][15], ctr;
bool prima=1;

const short modlin[]={1, 1, 0, -1, -1, -1, 0, 1};
const short modcol[]={0, 1, 1, 1, 0, -1, -1, -1};


bool ok(short i, short j)
{
    int auxi, auxj;

    for(int h=0;h<8;h++)
    {
        auxi=i;
        auxj=j;

        while(tabla[i][j]!=-1)
        {
            i+=modlin[h];
            j+=modcol[h];
            if(tabla[i][j]>0)
                return 0;
        }

        i=auxi;
        j=auxj;
    }

    return 1;
}

void bk(int k)
{
    if(k==n+1)
    {
        if(prima)
        {
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                if(tabla[i][j])
                fout<<j<<' ';
            fout<<'\n';
            ctr++;
            prima=0;
        }
        else
            ctr++;
    }

    for(int i=k;i<=n;i++)
        for(int j=1;j<=n;j++)
        if(!tabla[i][j])
        if(ok(i, j))
        {
            tabla[i][j]=k;
            bk(k+1);
            tabla[i][j]=0;
        }
}

int main()
{
    fin>>n;
    for(int i=0;i<=n+1;i++)
        tabla[i][0]=tabla[i][n+1]=tabla[0][i]=tabla[n+1][i]=-1;

    bk(1);

    fout<<ctr;
    return 0;
}