Cod sursa(job #8962)

Utilizator adri_seceSeceleanu Adrian adri_sece Data 25 ianuarie 2007 23:20:26
Problema Dame Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>
#include<iostream.h>
FILE *fin,*fout;
int d[1001],c[1001],n,j,k,rl[100],rc[100];
int f(int n)
{
if(n%2==0)
	return n/2;
else return n/2+1;
}
void g(int lc,int k)
{
int i,cc;
	if(lc==n+2 || lc==n+1)
		{
		for(i=1;i<k;i++)
		 fprintf(fout,"%d %d\n",rl[i],rc[i]);
			  return;

		}
	else
		{
			cc=(n-lc+2>f(n)+1)?n-lc+2:f(n)+1;
			while(cc<=n )
				{
				if(d[cc-lc+n]!=1 && c[cc]!=1)
				{
				c[cc]=1;
				d[cc-lc+n]=1;
				rl[k]=lc;
				rc[k]=cc;
				g(lc+2,k+1);
				c[cc]=0;
				d[cc-lc+n]=0;
				}
				cc++;
			  }

		}

}
int main()
{
int i,cc,lc;
fin=fopen("dame.in","rt");
fout=fopen("dame.out","wt");
fscanf(fin,"%d",&n);
if(n==2)n--;
if(n==3)n--;
fclose(fin);
lc=1;
cc=f(n);
c[cc]=1;
d[cc-lc+n]=1;
i=f(n)-1;
fprintf(fout,"%d\n",n);
fprintf(fout,"%d %d\n",lc,cc);

while(i>0)
	{
	lc+=2;
	cc--;
	c[cc]=d[cc-lc+n]=1;
	fprintf(fout,"%d %d\n",lc,cc);
	i--;
	}
i=n/2;
g(2,1);
fclose(fout);
return 0;
}