Cod sursa(job #2546)

Utilizator darklordHabalau Andrei darklord Data 17 decembrie 2006 18:38:19
Problema Dame Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>
#define dim 201

int sol[dim],n,k;

int abs1(int n);
void back();
void tipar();
void init()
{	 sol[k]=0;
}
int am_succesor()
{	if(sol[k]<n)
	{	sol[k]++;
		return 1;
	}
	else
		return 0;
}
int e_valid()
{	for(int i=1;i<k;++i)
		if(sol[k]==sol[i]||abs1(sol[k]-sol[i])==abs1(k-i))
			return 0;
	return 1;
}
int solutie()
{	return k==n;
}

int main()
{	freopen ("dame.in","r",stdin);
	freopen ("dame.out","w",stdout);
	scanf("%d",&n);
	back();
	fclose(stdin);fclose(stdout);
	return 0;
}
int abs1(int n)
{   if(n<0)
		n*=-1;
	return n;
}
void back()
{
	int as;k=1;
	init();
	while(k>0)
	{	do{}while((as=am_succesor())&&!e_valid());
		if(as)
			if(solutie())
				tipar();
			else
			{	k++;init();
			}
		else
			k--;
	}
}
int bun(int k,int val)
{   for(int i=1;i<k;++i)
		if(sol[k]==sol[i]||abs1(sol[k]-sol[i])==abs1(k-i))
			return 0;
	return 1;
}
void tipar()
{   for(int i=1;i<=n;++i)
	{	for(int j=1;j<=n;++j)
			if(sol[i]==j)
				printf("%d %d",i,j);


		printf("\n");
	}
	exit(0);
}