Pagini recente » Cod sursa (job #716381) | Cod sursa (job #1528875) | Cod sursa (job #2032769) | Cod sursa (job #2927390) | Cod sursa (job #2120568)
#include <fstream>
using namespace std;
ifstream cin("damesah.in");
ofstream cout("damesah.out");
int nr(0), n;
int sol[15];
bool c[15], d1[35], d2[35];
void prelucrare() {
++nr;
if (nr < 2) {
for (int i = 0; i < n; ++i) {
cout << sol[i] << " ";
}
cout << "\n";
}
}
void bkt(int p) {
if (p == n) {
prelucrare();
return;
}
for (int i = 1; i <= n; ++i) {
if(!c[i] && !d1[p - i + n - 1] && !d2[p + i - 2]) {
sol[p] = i;
c[i] = true;
d1[p - i + n - 1] = true;
d2[p + i - 2] = true;
bkt(p + 1);
c[i] = false;
d1[p - i + n - 1] = false;
d2[p + i - 2] = false;
}
}
}
int main()
{
cin >> n;
if (n == 6) {
bkt(0);
cout << nr;
return 0;
}
for (int i = 1; i <= n / 2; ++i) {
sol[0] = i;
c[i] = true;
d1[-i + n - 1] = true;
d2[i - 2] = true;
bkt(1);
c[i] = false;
d1[-i + n - 1] = false;
d2[i - 2] = false;
}
nr *= 2;
if (n % 2 == 1) {
int i = (n + 1) / 2;
sol[0] = i;
c[i] = true;
d1[-i + n - 1] = true;
d2[i - 2] = true;
bkt(1);
c[i] = false;
d1[-i + n - 1] = false;
d2[i - 2] = false;
}
cout << nr;
return 0;
}