Cod sursa(job #2471089)

Utilizator stormy_weatherelena cristina stormy_weather Data 10 octombrie 2019 11:17:57
Problema Problema Damelor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include<iostream>
#include<vector>
#include<algorithm>
#include<fstream>
using namespace std;

ifstream fin("damesah.in");
ofstream fout("damesah.out");

void update_table_with_queen(vector<vector <int>> &table, int l, int i, int f) {
  int n = table.size();

  for (int j = 0; j < n; j++) {
    table[l][j] += f;
    table[j][i] += f;
  }
  table[l][i] -= f;

  for (int j = 0; j < l; j++) {
    if (i - (l - j) >= 0)
      table[j][i - (l - j)] += f;
    if (i + (l - j) < n)
      table[j][i + (l - j)] += f;
  }
  for (int j = l + 1; j < n; j++) {
    if (i - (j - l) >= 0)
      table[j][i - (j - l)] += f;
    if (i + (j - l) < n)
      table[j][i + (j - l)] += f;
  }
  return;
}

void generate_conf(int l, int n, vector<int> cur_conf, vector<vector <int>> &table, int &count) {
  if (l == n) {
    if (count == 0) {
      for (int i = 0; i < n; i++)
        fout << cur_conf[i] + 1 << " ";
      fout << "\n";
    }
    count++;
    return;
  }
  for (int i = 0; i < n; i++) {
    if (table[l][i] == 0) {
      cur_conf[l] = i;
      // cout << "line is " << l << " and col is " << i << "\n";
      update_table_with_queen(table, l, i, 1);
      generate_conf(l + 1, n, cur_conf, table, count);
      update_table_with_queen(table, l, i, -1);
    }
  }
  return;
}

int main() {
  int n; fin >> n;

  vector<vector <int>> table(n, vector<int>(n, 0));
  vector<int> cur_conf(n);
  int count = 0;

  generate_conf(0, n, cur_conf, table, count);

  fout << count << "\n";
  return 0;
}