当前位置:首页 > 编程笔记 > 正文
已解决

C++八皇后问题代码

来自网友在路上 172872提问 提问时间:2023-11-19 12:07:10阅读次数: 72

最佳答案 问答题库728位专家为你答疑解惑

#include <iostream>
#include <cmath>
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来存储每个皇后的位置,尝试递归放置每个皇后,如果当前解决方案不可行,则回溯到上一个皇后位置并重新尝试。如果找到一个可行方案,则输出并继续尝试其他方案。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"C++八皇后问题代码":http://eshow365.cn/6-39241-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!