Cod sursa(job #2302450)

Utilizator iugastefanIuga Stefan iugastefan Data 14 decembrie 2018 17:43:13
Problema Problema Damelor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <vector>
using namespace std;
ofstream q("damesah.out");
void rec(int &y, int linie, vector<int> &diag1, vector<int> &diag2,
         vector<int> &aparitii, vector<int> &v) {
  if (v.size() == aparitii.size())
    y++;
  if (v.size() == aparitii.size() && y == 1) {
    for (auto x : v) {
      q << x + 1 << " ";
    }
    q << endl;
    return;
  }
  for (int coloana = 0; coloana < aparitii.size(); coloana++) {
    if (aparitii[coloana] == 1)
      continue;
    if (diag1[coloana + linie] == 1 ||
        diag2[aparitii.size() - 1 - coloana + linie] == 1)
      continue;

    v.push_back(coloana);
    aparitii[coloana] = 1;
    diag1[coloana + linie] = 1;
    diag2[aparitii.size() - 1 - coloana + linie] = 1;

    rec(y, linie + 1, diag1, diag2, aparitii, v);

    aparitii[coloana] = 0;
    diag1[coloana + linie] = 0;
    diag2[aparitii.size() - 1 - coloana + linie] = 0;
    v.pop_back();
  }
}
int main() {
  ifstream f("damesah.in");
  int N;
  f >> N;
  vector<int> diag1(2 * N - 1, 0);
  vector<int> diag2(2 * N - 1, 0);
  vector<int> aparitii(N, 0);
  vector<int> v;
  int x = 0;
  rec(x, 0, diag1, diag2, aparitii, v);
  q << x;
}