Cod sursa(job #2110442)

Utilizator ApolodorTudor Fernea Apolodor Data 20 ianuarie 2018 17:32:26
Problema Problema Damelor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>

using namespace std;

ifstream fi("damesah.in");
ofstream fo("damesah.out");

int n,k,d;
int a[14][14];

bool verif(int x, int y)
{
    for(int i=1;i<=n;i++)
        if(a[i][y]==1)
        return false;
    for(int j=1;j<=n;j++)
        if(a[x][j]==1)
        return false;
    for(int i=1;x+i<=n and y+i<=n;i++)
        if(a[x+i][y+i]==1)
        return false;
    for(int i=1;x-i>=1 and y-i>=1;i++)
        if(a[x-i][y-i]==1)
        return false;
    for(int i=1;x-i>=1 and y+i<=n;i++)
        if(a[x-i][y+i]==1)
        return false;
    for(int i=1;x+i<=n and y-i>=1;i++)
        if(a[x+i][y-i]==1)
        return false;
    return true;
}

void dame(int x, int y)
{
    if(x==n+1 and d==4)
    {
        if(k==0)
      {
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            if(a[i][j]==1)
            fo<<j<<" ";
      }
        k++;
    }
    else
    for(int i=x;i<=n;i++)
        for(int j=1;j<=n;j++)
        if(verif(i,j))
        {
            a[i][j]=1;
//            for(int l=1;l<=n;l++)
//                {for(int c=1;c<=n;c++)
//                fo<<a[l][c]<<" ";
//            fo<<endl;}
//            fo<<endl;
            d++;
            dame(i+1,j);
            d--;
            a[i][j]=0;
        }
}

int main()
{
    fi>>n;
    dame(1,1);
    fo<<endl;
    fo<<k;
}