八皇后问题解析

本文通过深度优先搜索算法实现八皇后问题的解决方案。利用三维布尔数组记录每列、主对角线及副对角线的状态,防止皇后互相攻击。递归函数在每一行寻找合适位置放置皇后,并染色标记避免冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream> using namespace std; //已确定每一行都有一个皇后 //重复的执行: 在x行中逐个查找---符合的就先放置并在关联位置染上色---进行下一行的查找 //---完毕后撤销原来在x行设置的关联染色并继续在该行中查找下一个符合的位置 //结束条件:当深度查找执行到的行数>8行时就返回 bool bMemoryArray[3][30] = {false}; int nResultNum = 0; //在本行中执行放置皇后 void dfs(int row) { //行数大于8行,说明皇后已经摆放完毕 if (row == 9) { //结果数加1 nResultNum++; return; } //在该行中进行行遍历 for (int col=1;col<=8;col++) { //1代表列是否被染色,2代表主对角线是否被染色,3代表副对角线是否被染色 if (!bMemoryArray[0][col] && !bMemoryArray[1][col-row+8] && !bMemoryArray[2][col+row]) { //如果都没染色则设置染色 bMemoryArray[0][col] = bMemoryArray[1][col-row+8] = bMemoryArray[2][col+row] = true; //继续下一行的放置皇后 dfs(row+1); //执行完毕后进行撤销原先在本行的相关染色 bMemoryArray[0][col] = bMemoryArray[1][col-row+8] = bMemoryArray[2][col+row] = false; //继续本行的一个符合位置的搜索 } } } int main() { //从第一行开始放置皇后 dfs(1); cout << "Eight Quees number of results: "<< nResultNum ; return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值