四皇后问题(回溯算法)

一、问题描述

四皇后问题:在4 ×4 的方格棋盘上放置4个皇后,使得没有两个皇后在同一行、同一列、也不在同一条45度的斜线上。问有多少种可能的布局?
4Queen-001

1、问题思路

一开始想到的最简单的办法就是去尝试,用暴力破解的办法依次去放每个皇后,最后这个问题得到的解是一个四维的向量,比如皇后一放在第1行第2列,皇后二放在第2行第4列,皇后三放在第3行第1列,皇后四放在第4行第3列。

2、向量解

在这里只记录列好就可以了,默认行好是依次排列的,因为虽然是一个二维的表格,应该是有行列坐标的,默认行号就是<1,2,3,4>。最后要求出来的是列号<2,4,1,3>或<3,1,4,2>

解是4 维向量< x1, x2, x3, x4 >

解: <2,4,1,3>,<3,1,4,2>

二、回溯算法求解

在时间复杂性和空间复杂性低的情况下,能不能设计一种算法,找出所有可能的布局。

1、搜索空间:4叉树

4Queen-002

在回溯算法里采用的策略,搜索树的空间的一种搜索方法
对皇后一来说,有4种放法,可以放在第1,2,3,4列。对皇后二而言,如果皇后一放在了第1列,那皇后二只能放在第3,4列

4Queen-003
但是如果占据了第1列和第3列,接下来就没有办法继续去放其他皇后了,这样的过程可以看成一个搜索的过程

2、搜索过程

(1)观察

先放第1个皇后,在皇后一的基础上继续放,观察有无冲突,如果有则不能放。树中虚线表示这种组合不可能成立,就不需要再进行搜索。

在依次进行搜索的过程后,只有限的一些路径能够走到最后,走到最后的路径为找到了正确的放法。那么这样的路径有多少条呢?

(2)问题转化

4叉树里找能够走通的路径有多少条,变成了4叉树的搜索过程,每一层代表第i个分量的值,找到最后就找到解,依次遍历树,就找到了解。在树的搜索过程中有回溯过程,所以这就是回溯算法。

三、问题推广

推广到八皇后问题也是一样,得到的是一个8维的向量,有92个这样的向量

例如:<1,5,8,6,3,7,2,4>是解

n皇后的问题都是同理。

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回溯算法可以用来解决n皇后问题。n皇后问题是指在n×n的棋盘上放置n个皇后,使得它们互相不能攻击到对方。每个皇后位于不同的行和列,而且不能在同一条对角线上。 回溯算法的思想是通过递归和回溯的方式遍历所有可能的解空间,并判断当前的解是否符合要求。具体的步骤如下: 1. 创建一个长度为n的数组pos,用于记录每个皇后应该放置的列数。 2. 定义一个judge函数,用于判断当前位置是否能放置皇后。在判断过程中,需要遍历已经放置的皇后,检查是否有冲突(同列或同对角线上不能放皇后)。 3. 定义一个backtrack函数,用于遍历每一行的可能位置。如果已经遍历到了最后一行,说明已经排好了一组解,将解的数量加1并输出解。否则,遍历当前行的所有列,将皇后放置在该列上,并调用judge函数判断是否能放置。如果能放置,则继续递归调用backtrack函数处理下一行。如果不能放置,则回溯到上一行重新选择位置。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [n皇后问题(回溯法)](https://blog.csdn.net/weixin_44607113/article/details/126095584)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [回溯算法——n皇后问题](https://blog.csdn.net/weixin_59367964/article/details/127986711)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [回溯法-N皇后问题](https://blog.csdn.net/u010520146/article/details/115521176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值