Pagini recente » Cod sursa (job #2251940) | Cod sursa (job #1777966) | Cod sursa (job #2683939) | Cod sursa (job #2150238) | Cod sursa (job #1657502)
#include <cstdio>
using namespace std;
int n;
int nr = 0;
int nrDame = 0;
int linie[15];
int coloana[15];
void citire()
{
scanf("%d", &n);
}
bool isValid(int k, int l)
{
for(int i = 0; i < nrDame; i++)
{
if(linie[i] == k)
{
return false;
}
if(coloana[i] == l)
{
return false;
}
int tmp1 = k - linie[i];
int tmp2 = l - coloana[i];
if(tmp1 < 0)
{
tmp1 = -tmp1;
}
if(tmp2 < 0)
{
tmp2 = -tmp2;
}
if(tmp1 == tmp2)
{
return false;
}
}
return true;
}
void afisare()
{
for(int i = 0; i < n; i++)
{
printf("%d ", coloana[i] + 1);
}
printf("\n");
}
void backtrack(int k, int l)
{
if(k == n)
{
if(nrDame != n)
{
return;
}
if(nr == 0)
{
afisare();
}
nr++;
}
else
{
if(isValid(k, l))
{
linie[nrDame] = k;
coloana[nrDame] = l;
nrDame++;
int tmp1, tmp2;
tmp1 = k;
tmp2 = l + 1;
backtrack(k + 1, 0);
nrDame--;
if(tmp2 != n)
{
backtrack(tmp1, tmp2);
}
}
else
{
int tmp1, tmp2;
tmp1 = k;
tmp2 = l + 1;
if(tmp2 == n)
{
return;
}
backtrack(tmp1, tmp2);
}
}
}
int main()
{
freopen("damesah.in", "r", stdin);
freopen("damesah.out", "w", stdout);
citire();
backtrack(0, 0);
printf("%d", nr);
return 0;
}