回溯 皇后 算法笔记_【算法笔记】回溯法——n皇后问题

这篇博客详细介绍了如何使用回溯法解决n皇后问题。通过逐行放置皇后,并检查当前位置是否与已放置的皇后冲突,实现了无冲突的皇后布局。文章提供了C++实现的算法代码,并展示了运行效果。
摘要由CSDN通过智能技术生成

回溯法——n皇后问题

问题描述

按照国际象棋的规则,皇后可以攻击同一行、同一列、同一斜线上的棋子。求n×n格的棋盘上彼此不受攻击的n个皇后的摆法。

下图为4皇后问题的一个解:

Q

Q

Q

Q

图1

解空间

用一维数组x表示n皇后问题的解(数组下标从1开始)。

其中,x[n]表示第n行的皇后放在第x[n]列。

图1所对应的数组x为{ 2, 4, 1, 3 }。

算法思想

逐行放置皇后,对n行,每行放置一个皇后。因此,n个皇后的行不会相同。

但是,列可能相同,或者放置的皇后会出现在之前放置好的皇后的对角线上。

所以,放置皇后时,对每一行,遍历每一列,判断该位置是否和先前放置好的皇后位置冲突,若不冲突,放置皇后。

算法代码

#include

#include

using namespace std;

int n;

int x[1000];

//判断能否放入该位置,即是否和现有的皇后位置冲突,若不冲突,表示可以放置

bool canPlace(int t){

for(int i = 1; i < t; i++){ //逐个逐个和现有的皇后比较

if(x[i] == x[t] || abs(t - i) == abs(x[t] - x[i])){ //列相等或在对角线上

return false;

}<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值