Pagini recente » Cod sursa (job #1956806) | Cod sursa (job #1723499) | Cod sursa (job #1081286) | Cod sursa (job #691735) | Cod sursa (job #2168413)
#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;
}