Pagini recente » Cod sursa (job #686430) | Cod sursa (job #638792) | Cod sursa (job #2914829) | Cod sursa (job #3212899) | Cod sursa (job #3873)
Cod sursa(job #3873)
#include <cstdio>
#include <string>
int x[32];
int viz[32];
int nr, n;
void afis()
{
for(int i=1;i<=n;i++)printf("%d ", x[i]);
printf("\n");
}
void back(int k)
{
viz[x[k-1]]=1;
if(k==n+1) {nr++;}
else
{
if(x[k-1]+1<=n)if(!viz[x[k-1]+1]) {x[k]=x[k-1]+1; back(k+1);}
if(x[k-1]+2<=n) if(!viz[x[k-1]+2]){ x[k]=x[k-1]+2; back(k+1);}
if(x[k-1]-1>=1) if(!viz[x[k-1]-1]){ x[k]=x[k-1]-1; back(k+1);}
if(x[k-1]-2>=1) if(!viz[x[k-1]-2]){ x[k]=x[k-1]-2; back(k+1);}
}
viz[x[k-1]]=0;
}
int main()
{
freopen("12perm.in", "r", stdin);
freopen("12perm.out", "w", stdout);
scanf("%d\n", &n);
for(int i=1;i<=n;i++) { viz[i-1]=0; viz[i]=1;x[1]=i;back(2);}
printf("%d\n", nr);
return 0;
}