Pagini recente » Cod sursa (job #2554849) | Cod sursa (job #1315539) | Cod sursa (job #2215086) | Cod sursa (job #499716) | Cod sursa (job #360161)
Cod sursa(job #360161)
#include<stdio.h>
int x[1001],n,k,as,ev,var=0,ok=1;
FILE*g=fopen("dame.out","w");
void init(int pa)
{
x[k]=0;
if(!pa)var=1;
}
void succesor()
{
as=0;
if(var==1){++k;x[k]=0;as=1;var=0;}
else
if(x[k]<n-1&&var!=2)
{
++x[k];
as=1;
}
if(var==2){as=1;var=0;}
}
void valid()
{
ev=1;
int i=0,j,l;
for(i=k-1,j=x[k]-1,l=x[k]+1;i>=0&&ev;--i,--j,++l)
{if(x[i]==x[k]||(j>=0&&x[i]==j)||(l<n&&x[i]==l)){ev=0;}}
// for(i=k-1,j=x[k]-1;i>=0&&j>=0&&ev;i--,j--)
// if(x[i]==j)ev=0;
//for(i=k-1,j=x[k]+1;i>=0&&j<n&&ev;j++,i--)
//if(x[i]==j)ev=0;
}
int solutie()
{
return k==n-1;
}
void tipar()
{ fprintf(g,"%d\n",n);
int i,j;
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
if(x[i]==j)fprintf(g,"%d %d\n",i+1,j+1);
}
fprintf(g,"\n");
ok=0;
}
int main()
{
FILE*f=fopen("dame.in","r");
fscanf(f,"%d",&n);
fclose(f);
if(n==1||n==2){fprintf(g,"%d\n%d %d",1,1,1);ok=0;}
if(n==3){fprintf(g,"%d\n%d %d\n%d %d",2,1,1,3,2);ok=0;}
k=0;
init(0);
while(k>=0&&ok)
{
do
{
succesor();
if(as)valid();
}while(!(!as||as&&ev));
if(as)
if(solutie())
tipar();
else
{
++k;init(1);var=2;
}
else --k;
}
fclose(g);
return 0;
}