Mai intai trebuie sa te autentifici.
Cod sursa(job #1959584)
Utilizator | Data | 9 aprilie 2017 17:38:44 | |
---|---|---|---|
Problema | Problema Damelor | Scor | 70 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.77 kb |
#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;
}