Cod sursa(job #1116559)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 22 februarie 2014 17:54:05
Problema Problema Damelor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>

const short NMAX=13;

int main(){
    std::ifstream fin("damesah.in");
    std::ofstream fout("damesah.out");

    short n; fin>>n;
    unsigned modalitati=0;

    bool col[NMAX],prd[2*NMAX],secd[2*NMAX];
    short k[NMAX];
    for(short i=0;i<NMAX;++i){ col[i]=false; k[i]=-1; }
    for(short i=0;i<2*NMAX;++i){ prd[i]=false; secd[i]=false; }

    short i=0;
    while(i>-1){
        bool cont=true;
        if(k[i]==n-1){
            k[i]=-1;
            col[n-1]=false;
            prd[i+1]=false;
            secd[i+n-1]=false;
            cont=false;
            --i;
        }
        else{
            if(k[i]!=-1){ col[k[i]]=false; secd[i+k[i]]=false; prd[n+i-k[i]]=false; }
            short j=-1;
            for(short j2=k[i]+1;j2<n;++j2)
                if(!(col[j2]||prd[n+i-j2]||secd[i+j2])){ j=j2; break; }

            if(j==-1){ k[i]=-1; --i; cont=false; }
            else{ k[i]=j; col[j]=true; secd[i+j]=true; prd[n+i-j]=true; }
        }

        if(cont){
            if(i==n-1){
                if(modalitati==0){
                    for(short i=0;i<n;++i) fout<<k[i]+1<<' ';
                    fout<<'\n';
                }
                ++modalitati;
            }
            else ++i;
        }
    }

    fout<<modalitati<<'\n';
}