Cod sursa(job #2120568)

Utilizator ContDeRacistAliniateEBlat ContDeRacist Data 2 februarie 2018 17:15:59
Problema Problema Damelor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#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;
}