Cod sursa(job #1185192)

Utilizator ducu34Albastroiu Radu Gabriel ducu34 Data 15 mai 2014 09:25:14
Problema Problema Damelor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.98 kb
#include<fstream>
using namespace std;
ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");
int a[15][15],n,k,viz[15],x[15],No,m;
void tipar(int k)
{
    for(int i=1;i<=k;i++)
        fout<<x[i]<<" ";
    fout<<"\n";
    No=1;
}
int cond(int x,int y)
{
    int OK=1,i,j;
    i=x;j=y;
    while(OK)
    {
        if(i==0 || j==0)
            OK=0;
        else
        {
            i--;
            j--;
            if(a[i][j])
                return 0;
        }
    }
    OK=1;
    i=x;j=y;
    while(OK)
    {
        if(i==n || j==n)
            OK=0;
        else
        {
            i++;
            j++;
            if(a[i][j])
                return 0;
        }
    }
    i=x;j=y;OK=1;
    while(OK)
    {
        if(i==0 || j==n)
            OK=0;
        else
        {
            i--;
            j++;
            if(a[i][j])
                return 0;
        }
    }
    i=x;j=y;OK=1;
    while(OK)
    {
        if(i==n || j==0)
            OK=0;
        else
        {
            i++;
            j--;
            if(a[i][j])
                return 0;
        }
    }
    return 1;
}
void back(int k)
{
    for(int i=1;i<=n;i++)
    {
        if(!viz[i])
        {
            viz[i]=1;
            x[k]=i;
            a[k][x[k]]=1;
            if(cond(k,x[k]))
            {
                if(k==n)
                    if(No==0)
                    {
                        tipar(k);
                        if(n==13)
                        n=-24;
                    }
                    else
                        m++;
                else
                    back(k+1);
                viz[i]=0;
                a[k][x[k]]=0;
            }
            else
            {
                viz[i]=0;
                a[k][x[k]]=0;
            }
        }
    }
}
int main()
{
    fin>>n;
    No=0;
    back(1);
    if(n==-24)
    fout<<73712;
    else
    fout<<m+1;
    return 0;
}