算法设计与分析——N皇后问题

本文详细探讨了N皇后问题,通过算法思路解析和回溯法的介绍,展示了如何解决这一经典问题。以4皇后问题为例,阐述了算法的具体应用,并提供了代码实现。
摘要由CSDN通过智能技术生成

问题描述:

n×n 格的国际象棋上摆放 n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
 

算法思路:

思路很简单,由于每行每列不能出现两个皇后,因此每行只能放一个皇后,那么第 i 行中皇后究竟应该放哪儿呢?我们可以从第 i 行第一列开始依次向后逐格判断,看看若放在当前位置是否会冲突,若不冲突,则继续考虑下一行,若冲突,则继续向后移动一格,再判断。 若 i 行所有的位置都不满足,则回溯,将 i-1 行皇后的位置往后移动,直到找到一个合理的位置,再继续从前往后寻找 i 行的位置。

 

回溯法介绍:

按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。
 

示例 --求解4皇后问题:

1. 寻找第一行插入点:首先将 Q 放置 a[0][0] ,无冲突;
2. 寻找第二行插入点: a[1][0] a[1][1]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值