Pagini recente » Cod sursa (job #1935518) | Cod sursa (job #2281792) | Cod sursa (job #1715057) | Cod sursa (job #2322348) | Cod sursa (job #2471089)
#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;
}