Cod sursa(job #1405438)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 29 martie 2015 11:24:21
Problema Problema Damelor Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 1.25 kb
#include <stdio.h>
#include <stdlib.h>
int v[17],f[17],perm=0,fl=0,diag1[400],diag2[400];
void bkt(int k,int n,int p)
{
    int i,j,g1,g2,x,y;
    if(p>k){
        perm++;
        if(fl==0){
            for(i=1; i<=k; i++)
                printf("%d ",v[i]);
            printf("\n");
            fl=1;
        }
    }
    else
    {
        for(v[p]=1; v[p]<=n; v[p]++)
        {
            x=p;
            y=v[p];
            while(x>1 && y>1)
                x--,y--;
            if(x==1)
                g1=n+y-1;
            else
                g1=n-x+1;
            x=p;
            y=v[p];
            while(x>1 && y<n)
                x--,y++;
            if(x==1)
                g2=y;
            else
                g2=n+x-1;
            if(f[v[p]]==0 && diag2[g2]==0 && diag1[g1]==0){
                f[v[p]]=1;
                diag1[g1]=1;
                diag2[g2]=1;
                bkt(k,n,p+1);
                diag1[g1]=0;
                diag2[g2]=0;
                f[v[p]]=0;
            }
        }

    }

}
int main()
{
    int i,n;
    freopen("damesah.in","r",stdin);
    freopen("damesah.out","w",stdout);
    scanf("%d",&n);
    bkt(n,n,1);
    printf("%d\n",perm);

    return 0;
}