Cod sursa(job #3873)

Utilizator gigi_becaliGigi Becali gigi_becali Data 29 decembrie 2006 11:06:34
Problema 12-Perm Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#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;
}