Cod sursa(job #1092101)

Utilizator andrettiAndretti Naiden andretti Data 26 ianuarie 2014 16:15:10
Problema Problema Damelor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<stdio.h>
#include<algorithm>
#include<cstring>
#define maxn 20
using namespace std;

int n,nr;
int x[maxn],sol[maxn];
int C[maxn],Dp[maxn<<1],Ds[maxn<<1];

void back(int k)
{
    if(k>n){
        nr++; if(nr==1) memcpy(sol,x,sizeof(x));
        return;
    }
    for(int i=1;i<=n;i++)
     if(!C[i] && !Dp[k-i+n] && !Ds[k+i]){
         x[k]=i;
         C[i]++; Dp[k-i+n]++; Ds[k+i]++;
         back(k+1);
         C[i]--; Dp[k-i+n]--; Ds[k+i]--;
     }
}

void print()
{
    for(int i=1;i<=n;i++) printf("%d ",sol[i]);
    printf("\n%d",nr);
}

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

    scanf("%d",&n);
    back(1);
    print();

    fclose(stdin);
    fclose(stdout);
    return 0;
}