Cod sursa(job #1416635)
Utilizator | Data | 8 aprilie 2015 16:45:47 | |
---|---|---|---|
Problema | Problema Damelor | Scor | 20 |
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-1] && !ds[i+j] && !l[a[k]] && !c[k] )
{
dp[j-i+n-1]=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] && !ds[i+j] && !l[a[k]] && !c[k] )
{
dp[i-j]=1;
ds[i+j]=1;
l[a[k]]=1;
c[k]=1;
back(k+1);
dp[i-j]=0;
ds[i+j]=0;
l[a[k]]=0;
c[k]=0;}
}
else
{
if(nr==0)
{for(i=0;i<n;i++)
g<<a[i]<<' ';
g<<'\n';}
nr++;
}
}
int main()
{
f>>n;
for(int i=0;i<=n;i++)
{ l[i]=0;
c[i]=0; }
for(int i=0;i<=30;i++)
{ dp[i]=0;
ds[i]=0; }
back(0);
g<<nr;
g.close();
f.close();
}