- #include
- #include
- using namespace std;
-
- // 判断能否放置皇后
- bool canPlace(int q[], int n, int i) {
- for (int j = 0; j < n; j++) {
- // 判断是否在同一行或同一列
- if (q[j] == i || abs(q[j] - i) == abs(j - n)) {
- return false;
- }
- }
- return true;
- }
-
- // 解决八皇后问题
- void solve(int q[], int n, int& count) {
- if (n == 8) {
- count++;
- // 输出解决方案
- cout << "Solution " << count << ":" << endl;
- for (int i = 0; i < 8; i++) {
- for (int j = 0; j < 8; j++) {
- if (q[i] == j) {
- cout << "Q ";
- } else {
- cout << ". ";
- }
- }
- cout << endl;
- }
- cout << endl;
- return;
- }
- for (int i = 0; i < 8; i++) {
- if (canPlace(q, n, i)) {
- q[n] = i;
- solve(q, n + 1, count);
- }
- }
- }
-
- int main() {
- int q[8] = {0};
- int count = 0;
- solve(q, 0, count);
- return 0;
- }
运行:
- Solution 1:
- Q . . . . . . .
- . . . Q . . . .
- . . . . . . Q .
- . . . . . . . Q
- . Q . . . . . .
- . . . . . Q . .
- . . Q . . . . .
- . . . . Q . . .
-
- Solution 2:
- Q . . . . . . .
- . . . . Q . . .
- . . . . . . Q .
- . . . . . . . Q
- . . . Q . . . .
- . . . . . . . Q
- . Q . . . . . .
- . . . . . Q . .
- ...
-
- Solution 92:
- . . . Q . . . .
- . . . . . . Q .
- Q . . . . . . .
- . . . . . . . Q
- . . . . Q . . .
- . Q . . . . . .
- . . . . . Q . .
- . . . . . . . Q
使用回溯算法来解决八皇后问题。使用一个数组q来存储每个皇后的位置,尝试递归放置每个皇后,如果当前解决方案不可行,则回溯到上一个皇后位置并重新尝试。如果找到一个可行方案,则输出并继续尝试其他方案。