1. 问题描述
2. 解题思路
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define N 20
int count = 0;
int q[N];
void dispasolution(int n) {
cout << "第" << ++count << "个解";
for(int i = 1; i <= n; i++) {
cout << "(" << i << "," << q[i] << ")";
}
cout << endl;
}
bool place(int i, int j) {
if(i == 1)
return true;
int k = 1;
while(k < i) {
if((q[k] == j) || abs(q[k] - j) == abs(k - i)) {
return false;
}
k++;
}
return true;
}
void queen(int i, int n) {
if(i > n)
dispasolution(n);
else {
for(int j = 1; j <= n; j++) {
if(place(i, j)) {
q[i] = j;
queen(i + 1, n);
}
}
}
}
int main() {
int n;
cout << "皇后问题(n < 20)n = ";
cin >> n;
if(n > 20)
cout << "n值太大,不能求解\n";
else {
cout << n << "皇后问题求解如下\n";
queen(1, n);
}
return 0;
}