Cod sursa(job #1129398)

Utilizator Sirius2001Happy Birthday Sirius2001 Data 27 februarie 2014 21:59:55
Problema Problema Damelor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
/*
    Keep It Simple!
*/

#include<stdio.h>

int v[20],n,sol;

bool c[20],d1[40],d2[40],nrs;

int valid(int k)
{
   for(int i=1;i<k;i++)
     if(v[i] == v[k])
      return 0;
  return 1;
}

void Print(int k)
{
   for(int i=0;i<n;i++)
    printf("%d ",v[i]+1);
   printf("\n");
}

void Back(int k)
{
   if( k == n)
   {
     if(!sol) Print(k);
     sol++;
   }
   else
   {
    for(int i=0;i<n;i++)
    {
       if( !c[i] && !d1[i-k+n-1] && !d2[k+i])
       {
             v[k] = i;
             c[i] = d1[i-k+n-1] = d2[k+i] = 1;
             Back(k+1);
             c[i] = d1[i-k+n-1] = d2[k+i] = 0;

       }

    }
    }
}

int main()
{
   freopen("permutari.in","r",stdin);
   freopen("permutari.out","w",stdout);

   scanf("%d",&n);

   Back(0);

   printf("%d",sol);
}