n皇后问题——关于斜线的编号

本文详细解析了N皇后问题中的斜线冲突避免方法,通过观察不同斜线上坐标的关系,给出了左斜线和右斜线的有效编号策略。

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

题目大意:在n*n的棋盘中,放置n个皇后(同一行、同一列、同一斜线,只有一个皇后)

这道题是一道非常经典的dfs模板题,同一行、同一列的判断不是很难,但同一斜线有一定的难度,下面给出关于斜线编号的解决方法

我们就先以4*4的棋盘为例

我们把被标红的这一条暂且称之为主对角线

观察一下主对角线上的点坐标规律

我们发现主对角线上的点的坐标(x,y)满足x==y

下面看看其他的斜线有怎样的性质

在蓝色这条斜线上的坐标(x,y)满足x-y==1

在粉色这条斜线上的坐标(x,y)满足x-y==-1

同样的,我们也可以吧主对角线的坐标(x,y)表示为x-y==0

所以可以用x-y来计算斜线的编号

x-y的值是从(-4+1)~(4-1)

但是数组下标(在c++)没有负数,所以我们把x-y+n当做数组下标,编号从1~(2*4-1)

同样的,对于n*n的棋盘,共有2n+1条左斜线,我们可以把向左倾斜的斜线编号为(x-y+n)

下面来解决一下向右倾斜的斜线编号(还是以4*4的棋盘为例)

不难看出,在标红的这条向右倾斜的主对角线上点的坐标满足x+y==5

在粉色的这条斜线上x+y==4

在蓝色的这条斜线上x+y==6


同样的,向右倾斜的斜线共有(2*4-1)条,按照x+y来编号,编号为2~8,因为我们普遍采用从1开始的数组下标

所以我们用(x+y-1)当做数组下标,范围是1~7

同样的,对于n*n的棋盘,共有2n+1条右斜线,我们可以把向右倾斜的斜线标号为(x+y-1)


来源:https://www.cnblogs.com/Peper/p/7966253.html



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值