八皇后问题-详解(附注释)
2024-07-28 09:06:50
发布于:上海
//八皇后问题
#include <iostream>
using namespace std;
//N=8则为8皇后,可更改
const int N = 8;
int b[N][N];
int so = 0;
void p(int b[N][N]) {
//先输出序号
cout << "No. " << ++so << endl;
//输出棋盘
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
cout << b[i][j] << " ";
}
cout << endl;
}
}
//自定义一个函数,判断当前位置是否可以放置皇后
bool q(int b[N][N], int r, int c) {
for (int i = 0; i < r; ++i) {
//判断行和列
if (b[i][c] == 1) {
return false;
}
}
//判断对角线
for (int i = r, j = c; i >= 0 && j >= 0; --i, --j) {
if (b[i][j] == 1) {
return false;
}
}
//判断对角线2
for (int i = r, j = c; i >= 0 && j < N; --i, ++j) {
if (b[i][j] == 1) {
return false;
}
}
return true;
}
//判断是否结束
bool s(int b[N][N], int r) {
if (r == N) {
p(b);
return true;
}
bool res = false;
for (int c = 0; c < N; ++c) {
if (q(b, r, c)) {
b[r][c] = 1;
res = s(b, r + 1);
b[r][c] = 0;
}
}
return res;
}
int main() {
s(b, 0);
return 0;
}
这里空空如也
有帮助,赞一个