Pagini recente » Cod sursa (job #2448577) | Cod sursa (job #1586559) | Cod sursa (job #1834775) | Cod sursa (job #2855217) | Cod sursa (job #2278686)
#include <fstream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
const int NMAX=15;
int st[NMAX+5];
bool viz[NMAX+5],dp[NMAX+50], ds[NMAX+50];
bool ok=0;
int n, s=0;
// Formula pentru diagonala secundara
//x+i-1
//Formula pentru diagonala principala
//x-i+n
void print()
{
int i;
if(ok==0)
{
s=1;
ok=1;
for(i=1;i<=n;i++)
{
fout<<st[i]<<" ";
}
fout<<"\n";
}
else
s++;
}
void backt(int x)
{
int i;
if(x==n+1)
{
print();
}
else
{
for(i=1;i<=n;i++)
{
st[x]=i;
if(ds[x+i-1]==0 and dp[x-i+n]==0 and viz[st[x]]==0)
{
viz[st[x]]=1;
ds[x+i-1]=1;
dp[x-i+n]=1;
backt(x+1);
ds[x+i-1]=0;
dp[x-i+n]=0;
viz[st[x]]=0;
}
}
}
}
int main()
{
fin>>n;
backt(1);
fout<<s<<"\n";
return 0;
}