用回溯法解决八皇后问题的思路,并求出17皇后解的数量(c#,c++,python表示)

本文介绍了如何运用回溯法解决八皇后问题,阐述了解决思路,包括皇后的冲突规则和如何放置皇后以避免冲突。文章通过递归和迭代两种方式展示代码实现,并提及了在解决17皇后问题时可能出现的栈溢出问题。
摘要由CSDN通过智能技术生成

1.解决思路

借用网上一张图,中间那个红点表示的就是皇后,这图的意思也就是一个皇后的影响范围为这这个皇后所在的那一列,那一行,对角线以及次对角线。其它的皇后不能在它的影响范围里否则会冲突。八皇后也就是在一个8x8的棋盘上后置8个皇后,皇后的数量与棋盘的行列数一样。这是基础,再来说说回溯法,回溯法最重要的思想就是当前这一步走不通,我们就掉头返回上一步找其他方案。这相对于枚举法列出所有可能再逐个进行排除要节省资源的多。

首先皇后的冲突规则是在同一行,同一列,同一对角线,同一次对角线。因为多个皇后不可能在同一行,所以我们可以看成第一个皇后在第一行,第二个皇后在第二行.........再用一个值来表示数组来表示皇后是处于第几列的,那么某个皇后在棋盘上的位置就可以用这是第几个皇后表示y,这个皇后对应数组里的值表示x。并且这样对于检测冲突可以少对比一次,只需要检测时候是否处于同一列,同一对角线,同一次对角线即可。

再来说说回溯法在n皇后问题上的应用,在棋盘上我们可以先放第一个皇后,再放一个皇后再检验冲突,如果遇到冲突将这个皇后的位置向右移动,如果这个皇后移动超出了棋盘,这表明这种情况下没有解,对此可以把这个皇后拿出棋盘并移动上一个皇后,直到上一个皇后也不冲突,在继续放置下一个皇后,找出不冲突的位置,如果到了就这样放到了第八个皇后仍不冲突那么得到一种解。在得到了一种解后再把第8个皇后拿出棋盘,移动第7个皇后,继续找出不冲突的位置,如果第7个皇后剩下的位置全冲突,那把第7个皇后拿出棋盘,再移动第6个皇后的位置........就酱,如果第一个皇后移动超出了棋盘那么表示已经找出所有解。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值