如何理解n皇后中对角线的标识
dg[N]:记录对角线上是否有皇后。
例如: 当前位置cur处于(i,j)坐标,要查看cur所在对角线上是否已经有皇后了。
假设cur在对角线k上,则只要查看dg[k]是否为ture即可。
如何知道当前坐标所在的对角线?
每个坐标的对角线有两条:主对角线(左上到右下)和副对角线(右上到左下)
对于副对角线:
可以发现,处于同一对角线上的坐标,它们的 x坐标 + y坐标 = 同一个值
,否则不同。
因此 x坐标 + y坐标可以确定唯一一条对角线(可以当做编号),x + y 相同的坐标处于同一对角线。
对于主对角线:
可以发现,处于同一对角线上的坐标,它们的 x坐标 - y坐标 = 同一个值
,否则不同。
x - y
有可能为负值,最终对角线是否存在的结果是记录在dg数组中的。
而数组的下标 >= 0,因此为了避免对角线的”编号”为负数,需要为每个x-y
后加上一个相同值,这样既保持了对角线编号的唯一性,也避免了出现负数编号。