Cod sursa(job #1416657)

Utilizator paul_danutDandelion paul_danut Data 8 aprilie 2015 18:21:56
Problema Problema Damelor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
#include <fstream>

using namespace std;

ifstream f("damesah.in");
ofstream g("damesah.out");

int a[15],dp[30],ds[30],l[15],c[15],nr=0,n;

void back(int k)
{
    int i,j;
    if(k<=n)
       for(i=1;i<=n;i++)
              {a[k]=i;                               ///k coloana, a[k] linie
              j=k;

              if( i-j<0 && !dp[j-i+n] && !ds[i+j] && !l[a[k]] && !c[k] )
                          {
                          dp[j-i+n]=1;
                          ds[i+j]=1;
                          l[a[k]]=1;
                          c[k]=1;

                          back(k+1);

                          dp[j-i+n]=0;
                          ds[i+j]=0;
                          l[a[k]]=0;
                          c[k]=0;}
              else
                   if( !dp[i-j+1] && !ds[i+j] && !l[a[k]] && !c[k] )
                          {
                          dp[i-j+1]=1;
                          ds[i+j]=1;
                          l[a[k]]=1;
                          c[k]=1;

                          back(k+1);

                          dp[i-j+1]=0;
                          ds[i+j]=0;
                          l[a[k]]=0;
                          c[k]=0;}
              }
     else
        {
        if(nr==0)
           {for(i=1;i<=n;i++)
               g<<a[i]<<' ';
           g<<'\n';}
        nr++;
        }
}
int main()
{
    f>>n;

    for(int i=0;i<=14;i++)
         {   l[i]=0;
             c[i]=0;     }

    for(int i=0;i<=30;i++)
         {   dp[i]=0;
             ds[i]=0;    }

    back(1);

    g<<nr;

    g.close();
    f.close();
}