做题记录:n-皇后问题
n-皇后问题
#include "bits/stdc++.h"
using namespace std;
int n;
bool ans[15][15];
bool flag[15][15];
void iflag() {
memset (flag, 0, sizeof (flag));
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= n; j ++) {
if (ans[i][j]) {
for (int x = 1; x <= n; x ++) {
flag[x][j] = 1;
}
for (int y = 1; y <= n; y ++) {
flag[i][y] = 1;
}
for (int x = i, y = j; x >= 1 && y >= 1; x --, y --) {
flag[x][y] = 1;
}
for (int x = i, y = j; x <= n && y <= n; x ++, y ++) {
flag[x][y] = 1;
}
for (int x = i, y = j; x >= 1 && y <= n; x --, y ++) {
flag[x][y] = 1;
}
for (int x = i, y = j; x <= n && y >= 1; x ++, y --) {
flag[x][y] = 1;
}
}
}
}
}
void print () {
for (int i = 1; i <= n; i ++) {
for (int j = n; j >= 1; j --) {
if (ans[i][j]) putchar('Q');
else putchar('.');
}
putchar ('\n');
}
putchar('\n');
}
void dfs (int x) {
if (x > n) {print(); return ;}
for (int i = 1; i <= n; i ++) {
if (!flag[x][i]) {
ans[x][i] = 1;
iflag();
dfs(x+1);
ans[x][i] = 0;
iflag();
}
}
}
int main() {
cin >> n;
dfs (1);
return 0;
}