Cod sursa(job #2974258)

Utilizator claudiuhamciucHamciuc Claudiud claudiuhamciuc Data 3 februarie 2023 18:01:11
Problema Problema Damelor Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.44 kb
#include <fstream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
struct coords{short int i,j;};
int n,v[21],k,cantulics;
bool fr[21][21],firstsaid=false;
void paulizare(int i,int j){
    //fout<<"Hi Paul"<<'\n';
    for(int c=1;c<=n;c++)
    {
        fr[c][j]=1;
        fr[i][c]=1;
    }
    int c1=i,c2=j,c1c=c1,c2c=c2;
    while(c2>0 || c1>0)
    {
        fr[c1][c2]=1;
        c2--;
        c1--;
    }
    c1=c1c;
    c2=c2c;
    while(c2<=n || c1<=n)
    {
        fr[c1][c2]=1;
        c2++;
        c1++;
    }
    c1=c1c; c2=c2c;
    while(c2<=n || c1>0)
    {
        fr[c1][c2]=1;
        c2++;
        c1--;
    }
    c1=c1c;
    c2=c2c;
    while(c2>0 || c1<=n)
    {
        fr[c1][c2]=1;
        c2--;
        c1++;
    }
}
void depaulizare(int i,int j){
    //fout<<"RIP Paul"<<'\n';
    for(int c=1;c<=n;c++)
    {
        fr[c][j]=0;
        fr[i][c]=0;
    }
    int c1=i,c2=j,c1c=c1,c2c=c2;
    while(c2>0 || c1>0)
    {
        fr[c1][c2]=0;
        c2--;
        c1--;
    }
    c1=c1c;
    c2=c2c;
    while(c2<=n || c1<=n)
    {
        fr[c1][c2]=0;
        c2++;
        c1++;
    }
    c1=c1c; c2=c2c;
    while(c2<=n || c1>0)
    {
        fr[c1][c2]=0;
        c2++;
        c1--;
    }
    c1=c1c;
    c2=c2c;
    while(c2>0 || c1<=n)
    {
        fr[c1][c2]=0;
        c2--;
        c1++;
    }
}
void bkt(int i){
    int nr=1;
    if(i>n)
        return;
    while(nr<=n){
        if(fr[i][nr]==0)
        {
            v[i]=nr;
            paulizare(i,nr);
            //fout<<'\n';
            if(i==n)
            {
                if(!firstsaid)
                {
                    firstsaid=true;
                    for(int c=1;c<=n;c++)
                        fout<<v[c]<<" ";
                    fout<<'\n';
                }
                cantulics++;
            }
            /*for(int c=1;c<=i;c++)
                        fout<<v[c]<<" ";
                    fout<<'\n';*/
            /*for(int c=1;c<=n;c++)
            {
                for(int c2=1;c2<=n;c2++)
                    fout<<fr[c][c2]<<" ";
                fout<<'\n';
            }*/
            bkt(i+1);
            depaulizare(i,nr);
            for(int c=1;c<=i-1;c++)
                paulizare(c,v[c]);
        }
        nr++;
    }
}
int main()
{
    fin>>n;
    bkt(1);
    fout<<cantulics;
    return 0;
}