Pagini recente » Cod sursa (job #2547537) | Cod sursa (job #2443642) | Cod sursa (job #965630) | Cod sursa (job #2255674) | Cod sursa (job #2773731)
#include <bits/stdc++.h>
#define NMAX 31
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
int v[NMAX], diag1[NMAX], diag2[NMAX], line[NMAX];
int n, cnt;
bool ok;
bool valid(int k) {
return !(line[v[k]] || diag1[v[k] + n - k] || diag2[v[k] + k - 1]);
}
void gen(int k) {
for(int i = 1; i <= n; i++) {
v[k] = i;
if(valid(k)) {
diag1[n + i - k] = 1;
diag2[k + i - 1] = 1;
line[i] = 1;
if(k < n)
gen(k + 1);
else {
if(!ok) {
ok = 1;
for(int j = 1; j <= n; j++)
fout << v[j] << ' ';
fout << '\n';
}
cnt++;
}
diag1[n + i - k] = 0;
diag2[i + k - 1] = 0;
line[i] = 0;
}
}
}
int main() {
fin >> n;
gen(1);
fout << cnt;
}