Cod sursa(job #1759796)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 19 septembrie 2016 20:42:10
Problema Problema Damelor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.47 kb
#include <fstream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
short n,j,k,ok,st[15],top;
bool v[15],v1[15],v2[15],V1[15],V2[15];
int ct;
void Afisare()
    {int i;
     for(i=1;i<=n;i++)
        fout<<st[i]<<" ";
    }
void Back(int top)
    {int i,ip;
     if(top==n+1){if(ok==0){Afisare();ct++;ok=1;}
                   else ct++;
                 }
     else for(i=1;i<=n;i++)
        {ip=n-i+1;//fout<<"||"<<i<<"("<<ip-top<<")"<<"("<<i-top<<")"<<"|| ";
         //if(i==2&&top==3)//fout<<"//"<<V1[i-top]<<" "<<v1[ip-top]<<"//";
         if(i>=top){if(v[i]==0&&v1[i-top]==0)
                   {if(ip>=top&&V1[ip-top]==0)
                    {st[top]=i;//fout<<i<<"("<<ip-top<<")"<<"("<<i-top<<")"<<"* ";
                    v[i]=1;
                    v1[i-top]=1;
                    V1[ip-top]=1;
                    Back(top+1);
                    v[i]=0;
                    v1[i-top]=0;
                    V1[ip-top]=0;
                    //fout<<"\n";
                    }
                    else if(ip<top&&V2[top-ip]==0)
                    {st[top]=i;//fout<<i<<"("<<ip-top<<")"<<"("<<i-top<<")"<<" ";
                    v[i]=1;
                    v1[i-top]=1;
                    V2[top-ip]=1;
                    Back(top+1);
                    v[i]=0;
                    v1[i-top]=0;
                    V2[top-ip]=0;
                   // fout<<"\n";
                    }
                   }
                    }
         else {if(v[i]==0&&v2[top-i]==0)
                   {if(ip>=top&&V1[ip-top]==0)
                    {st[top]=i;//fout<<i<<"("<<ip-top<<")"<<"("<<i-top<<")"<<"* ";
                    v[i]=1;
                    v2[top-i]=1;
                    V1[ip-top]=1;
                    Back(top+1);
                    v[i]=0;
                    v2[top-i]=0;
                    V1[ip-top]=0;
                 //   fout<<"\n";
                    }
                    else if(ip<top&&V2[top-ip]==0)
                    {st[top]=i;//fout<<i<<"("<<ip-top<<")"<<"("<<i-top<<")"<<"* ";
                    v[i]=1;
                    v2[top-i]=1;
                    V2[top-ip]=1;
                    Back(top+1);
                    v[i]=0;
                    v2[top-i]=0;
                    V2[top-ip]=0;
                 //   fout<<"\n";
                    }
                   }
                    }
        }
    }
int main()
{fin>>n;
 Back(1);
 fout<<"\n"<<ct;
}