手撕八皇后问题,用回溯法哦(深度优先法)

这篇博客探讨了如何使用回溯法(DFS)解决经典的八皇后问题。文章强调了在判断皇后位置合法性时,不仅要考虑列占位,还要处理上对角线和下对角线的占位。通过行号减列号判断上对角,用额外数组记录占用状态,同时为避免负数下标,行号减列号相减结果统一加7。同样方法处理下对角线。最后,博主提到将详细介绍代码实现。

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

问题描述:

在一个8*8的棋盘上,有8个皇后放置在棋盘上,两两不能对冲,即行 ,列,斜 只能放置一个皇后。

比如下图,第一行的皇后行 ,列,斜 只能放置一个皇后。

 

解答这种题,首先分析算法流程

这里有一个点特别注意,就是占位标志的判断,首先是列占位,这个直接标志就行了

但是斜线角怎么判断?

通常上对角,行号减去列号都是相等的,比如拿f[0][0] 来说,它的上对角是哪些呢?

行号0 -列号0 =0 ,它的对角行号减去列号都是0,我们可以用一个数组存储d1[0] = 0 ,表示占用,数组的下标是行号减去列号相减的结果。

注意:为了避免数组下标出现负号,所以相减结果统一加7(为什么是7,因为棋盘上,最小的负数是-7)

 

接下来下对角,行号加列号都是相等的,其他跟上面同理。但用另外的一个数组d2存储,方便判断

接下来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值