Pagini recente » Cod sursa (job #1817377) | Cod sursa (job #695765) | Cod sursa (job #80784) | Cod sursa (job #2323870) | Cod sursa (job #2700927)
#include <fstream>
#include <algorithm>
#include <bitset>
using namespace std;
const short NMAX = 13;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
bitset<2 * NMAX + 3> diag1,diag2;
int perm[NMAX + 3],n;
void reinit()
{
int i;
for(i = 1; i <= 2 * NMAX + 1; i++)
diag1[i] = diag2[i] = 0;
}
bool check()
{
int i;
for(i=1;i<=n;i++)
{
if(diag1[i+perm[i]+1] or diag2[i-perm[i]+n])
return 0;
diag1[i+perm[i]+1]=1;
diag2[i-perm[i]+n]=1;
}
return 1;
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(NULL);
bool ok = 1;
int i,ans = 0;
fin >> n;
for(i = 1; i <= n; i++)
perm[i] = i;
do
{
if(check())
{
if(ok)
{
ans++;
ok = 0;
for(i = 1; i <= n; i++)
fout << perm[i] << " ";
fout << "\n";
}
else
ans++;
}
reinit();
}while(next_permutation(perm + 1, perm + n + 1));
fout << ans;
return 0;
}