一眼看出思路的都是水题。直接上代码。已通过。
#include<iostream>
using namespace std;
int p[12][12]; //初始化棋盘
int result=0;int n;
void init(int n) { //初始化棋盘
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
p[i][j] = 0;
}
}
}
bool issafe(int row, int col) { //判断该位置是否能放皇后
for (int i = 0; i < row; i++) {
for (int j = 0; j < n; j++) {
if (p[i][j] == 1) {
if (i == row || j == col || (j - i) == (col - row) || (j + i) == (col + row))
return false;
}
}
}return true;
}
void putqueen(int x) { //放皇后
for (int y = 0; y < n; y++) { //遍历该行
if (issafe(x, y)) { //如果安全
p[x][y] = 1; //则放皇后
if (x < n - 1) { //如果未到最后一行
putqueen(x + 1); //在下一行放皇后
} else result++;
}
for (int k = 0; k < n; k++) p[x][k] = 0;
}
}
int main() {
cout << "请输入n:";
while (cin >> n) {
init(n);putqueen(0);
cout << "解法有" << result << "种" << endl;
}return 0;
}