回溯法—八皇后问题

本文介绍如何使用回溯法解决经典的八皇后问题,通过合理的布局策略和冲突检测算法,确保每个皇后都不会互相攻击。文章详细解释了利用一维数组记录皇后位置的方法以及如何通过检查列号和对角线来避免冲突。

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

回溯法—八皇后问题

求解八皇后问题:

n*n个方块排成nn列的棋盘上,如果两个皇后位于同一行、同一列或同一对角线上,则称它们互相攻击。现在要求找出使棋盘上n个皇后互不攻击布局。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

列号:(82417536

分析

为了找出互不攻击的布局,需要对n*n个方案进行检查,将有攻击的布局剔除掉。这是一种例举法。但这种方法对于较大的n,其工作量会急剧的增大,而逐一例举是没有必要的。

算法:

由于在第一行上的皇后在第一列,则第二行上的皇后就不可能在第一列。首先将每一行上安置一个皇后,并假设第i个皇后在第i行上,用一个一维数组queen[1..n]用于记录安放皇后的过程中随时记录第i行上的皇后所在的列号。由此可知,在这种情况下,实际上已经剔除了两个皇后在同一行的可能性。因此,在安置每一行上的皇后时,只需考虑每两个皇后不能在同一列或同一对角线上的可能性。

引进集合a,b,c分别表示各列、各条右对角线和各条左对角线上是否放置了皇后。在同一右对角线上,i-j是常量。在同一左对角线上,i+j是常量。第i行第j列上放皇后在第i-j条右对角线和第i+j条左对角线上。能放皇后时为真,不能放皇后时为假。数组queen存放各行皇后所在的列号。

从第一行(即i=1)开始布局。

设前i-1行上的皇后已布局好,即它们互不攻击。现考虑安排第i行上皇后位置,使之与前i-1行上的皇后也互不攻击。为了实现这一点,可以从第i行皇后的当前位置开始向右搜索。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值