C++八皇后问题代码

cpp 复制代码
#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;
}

运行:

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

相关推荐
白帽攻防录9 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
十年Java程序媛9 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
2603_965148119 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
生态学者10 小时前
Global Change Biology | 森林越“步调一致”,反而越怕干旱?树木生长与叶片活动的同步之谜
大数据·人工智能·算法·r语言·微信公众平台
所以遗憾是什么呢?10 小时前
【题解】Educational Codeforces Round 195 (Rated for Div. 2) ABCDE
c++·动态规划·acm·icpc·ccpc·xcpc·codeforecs
xixiaoyunya10 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
lsswear10 小时前
Agent 框架新手入门与实战部署指南
大数据·人工智能·算法
学逆向的10 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
小坏讲微服务11 小时前
刚发布一个月的JDK 27,为什么我建议你立刻升级?
java·开发语言·spring boot·spring·架构·求职招聘·springboot4
Lhan.zzZ11 小时前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt