N皇后问题回溯法求解(Java)

思路:

要求简化为:任何两个皇后都不能在同一行、同一列以及同一条斜线上(包括正对角线和反对角线)。

从行row开始递增,设置三个集合记录列位置,正对角线位置,反对角线位置。

方向一的斜线(正对角线)为从左上到右下方向,同一条斜线上的每个位置满足行下标与列下标之差相等,例如 (0,0) 和 (3,3) 在同一条方向一的斜线上。因此使用行下标与列下标之差即可明确表示每一条方向一的斜线。

方向二的斜线(反对角线)为从右上到左下方向,同一条斜线上的每个位置满足行下标与列下标之和相等,例如 (3,0) 和 (1,2) 在同一条方向二的斜线上。因此使用行下标与列下标之和即可明确表示每一条方向二的斜线。

每次放置皇后时,对于每个位置判断其是否在三个集合中,如果三个集合都不包含当前位置,则当前位置是可以放置皇后的位置。

代码:

leetcode链接面试题 08.12. 八皇后 - 力扣(LeetCode)


//N皇后问题求解
public class Solution {

    //判断一个位置所在的列和两条斜线上是否已经有皇后,使用三个集合
    // columns、diagonals1 和 diagonals2
    //
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值