Pagini recente » Istoria paginii runda/autumn19 | Cod sursa (job #1162395) | Cod sursa (job #1306722) | Cod sursa (job #2649074) | Cod sursa (job #1889144)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <algorithm>
#include <cassert>
using namespace std;
vector<int> sol;
vector<int> aux;
bool col[50], dg1[50], dg2[50];
int n, cnt;
void bk(int k) {
if (k > n) {
if (sol.size() == 0) {
sol = aux;
}
cnt++;
return;
}
for (int i = 1; i <= n; ++i) {
if (!col[i] && !dg1[i+k] && !dg2[20+i-k]) {
col[i] = dg1[i+k] = dg2[20+i-k] = true;
aux[k-1] = i;
bk(k+1);
col[i] = dg1[i+k] = dg2[20+i-k] = false;
}
}
}
int main() {
freopen("damesah.in","r",stdin);
freopen("damesah.out","w",stdout);
cin >> n;
aux.resize(n);
bk(1);
for (int i = 0; i < sol.size(); ++i) {
cout << sol[i] << " ";
}
cout << endl << cnt << endl;
return 0;
}