Pagini recente » Cod sursa (job #1355079) | Cautari ortogonale | Cod sursa (job #1002057) | Arhiva de probleme | Cod sursa (job #2012948)
#include<stdio.h>
#define MAXN 14
void bkt(int lin);
FILE*fin,*fout;
short int queen[MAXN];
bool col[MAXN],princ[2*MAXN],second[2*MAXN];
int N;
int ans;
int main()
{
fin=fopen("damesah.in","r");
fout=fopen("damesah.out","w");
fscanf(fin,"%d",&N);
ans=0;
bkt(1);
fprintf(fout, "%d\n",ans);
fclose(fin);
fclose(fout);
return 0;
}
void bkt(int lin)
{
if(lin==N+1)
{
if(ans==0)
{
for(int i=1;i<=N;i++)
{
fprintf(fout, "%d ",queen[i]);
}
fprintf(fout, "\n");
}
ans++;
}
else
{
int initprinc=N-lin+1;
int initsecond=2*N-lin;
for(int c=1;c<=N;c++)
{
if(!col[c] && !princ[initprinc+c-1] && !second[initsecond-(c-1)])
{
//putem sa punem o dama
queen[lin]=c;
col[c]=1;
princ[initprinc+c-1]=1;
second[initsecond-(c-1)]=1;
bkt(lin+1);
col[c]=0;
princ[initprinc+c-1]=0;
second[initsecond-(c-1)]=0;
}
}
}
}