Pagini recente » Cod sursa (job #1946253) | Cod sursa (job #790787) | Cod sursa (job #515812) | Cod sursa (job #2851744) | Cod sursa (job #1118112)
#include<cstdio>
#include<algorithm>
using namespace std;
int Solution,SolutionNumber,V[100],n,Used[100],ok,up,down;
int IsValid(int nr,int pos)
{
int up,down,ok=1;
up=down=nr;
for(int i=pos-1;i>=1 && ok;i--)
{
up++;down--;
ok=V[i]!=up && V[i]!=down; //DeMorgan
}
return ok;
}
void back(int X)
{
if(X==n+1)
{
SolutionNumber++;
if(!Solution)
{
for(int i=1;i<=n;i++)printf("%d ",V[i]);
Solution=1;
}
return;
}
for(int i=1;i<=n;i++)
{
if(Used[i])continue;
ok=1;
up=down=i;
for(int j=X-1;j>=1 && ok;j--)
{
up++;down--;
ok=V[j]!=up && V[j]!=down; //DeMorgan
}
if(ok)
{
V[X]=i;
Used[i]=1;
back(X+1);
Used[i]=0;
}
}
}
int main()
{
freopen("damesah.in","r",stdin);
freopen("damesah.out","w",stdout);
scanf("%d",&n);
back(1);
printf("\n%d",SolutionNumber);
return 0;
}