Pagini recente » Cod sursa (job #1310503) | Cod sursa (job #2163318) | Cod sursa (job #2177054) | Cod sursa (job #2196541) | Cod sursa (job #354370)
Cod sursa(job #354370)
#include<fstream.h>
int x[1001],n,k,as,ev,var=0,ok=1;
ofstream g("dame.out");
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;
for(i=k-1;i>=0&&ev;i--)
{if(x[i]==x[k]){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()
{ g<<n<<'\n';
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
if(x[i]==j)g<<i+1<<" "<<j+1<<'\n';
}
g<<'\n';
ok=0;
}
int main()
{
ifstream f("dame.in");
f>>n;
f.close();
if(n==1){g<<1<<'\n'<<1<<" "<<1;ok=0;}
if(n==2){g<<1<<'\n'<<1<<" "<<1;ok=0;}
if(n==3){g<<2<<'\n'<<1<<" "<<1<<'\n'<<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--;
}
g.close();
return 0;
}