Cod sursa(job #2168413)

Utilizator CojocaruVicentiuCojocaru Vicentiu CojocaruVicentiu Data 14 martie 2018 10:51:41
Problema Problema Damelor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include<fstream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
int n,ok,niv,st[20],fvc[30],fvds[30],fvdp[30],ams,ev;

int pune_valoare()
{
    int ok=0;
    if(niv<=n && st[niv]<n)
    {
        st[niv]++;
        ok=1;
    }
    return ok;
}
int validare()
{
    int ok=0;
    if(fvc[st[niv]]==0 && fvds[st[niv]+niv]==0 && fvdp[niv-st[niv]+n]==0)
    {
        ok=1;
    }
    return ok;
}
int solutie()
{
    if(niv==n)
        return 1;
    else
        return 0;
}
void tipar(int niv)
{
    int i;
    for(i=1;i<=niv;i++)
        fout<<st[i]<<" ";
    fout<<'\n';
}
void backtr()
{
    niv=1;ok=0;
    while(niv>0)
    {
        do{
            ams=pune_valoare();
            if(ams==1)
                ev=validare();
        }while(ams==1 && ev==0);
        if(ams==1 && ev==1)
        {
            if(solutie()==1)
            {
                if(ok==0)
                    tipar(niv);
                ok++;
            }
            else
            {
                fvc[st[niv]]=1;
                fvds[st[niv]+niv]=1;
                fvdp[niv-st[niv]+n]=1;
                niv++;
                st[niv]=0;
            }
        }
        else
        {
            niv--;
            fvc[st[niv]]=0;
            fvds[st[niv]+niv]=0;
            fvdp[niv-st[niv]+n]=0;
        }
    }
}
int main()
{
    fin>>n;
    backtr();
    fout<<ok;

    fin.close();
    fout.close();
    return 0;
}