Pagini recente » Cod sursa (job #1550718) | Diferente pentru problema/cuba intre reviziile 32 si 15 | Cod sursa (job #1713215) | Cod sursa (job #1286425) | Cod sursa (job #1959584)
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
#define MaxN 20
using namespace std;
FILE*IN,*OUT;
int N,Out[MaxN],Sol=0;
bool Col[MaxN],Diag1[MaxN],Diag2[MaxN],Shown=false;
void Back(int lvl)
{
if(lvl==N+1)
{
Sol++;
if(!Shown)
{
Shown=true;
for(int i=1;i<=N;i++)
fprintf(OUT,"%d ",Out[i]);
fprintf(OUT,"\n");
}
}
for(int i=1;i<=N;i++)
if(!Col[i]&&!Diag1[N+i-lvl]&&!Diag2[i+lvl])
Out[lvl]=i,Col[i]=true,Diag1[N+i-lvl]=true,Diag2[i+lvl]=true,Back(lvl+1),Col[i]=false,Diag1[N+i-lvl]=false,Diag2[i+lvl]=false;
}
int main()
{
IN=fopen("damesah.in","r");
OUT=fopen("damesah.out","w");
fscanf(IN,"%d",&N);
Back(1);
fprintf(OUT,"%d\n",Sol);
return 0;
}