Pagini recente » Cod sursa (job #1701106) | Cod sursa (job #2368745) | Cod sursa (job #966921) | Cod sursa (job #1490066) | Cod sursa (job #3302506)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
const int MAX=13;
int n,colmask,p_diagmask,s_diagmask,sol,v[MAX+5];
bool print=0;
void bkt(int pas)
{
if (pas==n)
{
if (!print)
{
for (int i=0; i<n; i++)
fout<<(int)log2(v[i])+1<<" ";
fout<<'\n';
print=1;
}
sol++;
}
else
{
int mask=colmask&(s_diagmask>>pas)&(p_diagmask>>(n-1-pas));
while (mask)
{
int lsb=mask&(-mask);
v[pas]=lsb;
colmask^=lsb;
s_diagmask^=(lsb<<pas);
p_diagmask^=(lsb<<(n-1-pas));
bkt(pas+1);
colmask^=lsb;
s_diagmask^=(lsb<<pas);
p_diagmask^=(lsb<<(n-1-pas));
mask^=lsb;
}
}
}
int main()
{
fin>>n;
colmask=(1<<n)-1;
p_diagmask=(1<<(2*n-1))-1;
s_diagmask=(1<<(2*n-1))-1;
bkt(0);
fout<<sol;
return 0;
}