在深度优先搜索的例题中,比如像n皇后问题,三阶魔方这些都涉及到了判断对角线是否有元素的问题,其中主要是发现其中的填入的元素与其他有元素的位置上的坐标的关系
比如n皇后问题
(0, 1) (0, 1) (0, 2) (0, 3)
(1, 0) (1, 1) (1, 2) (1, 3)
(2, 0) (2, 1) (2, 2) (2, 3)
(3, 0) (3, 1) (3, 2) (3, 3)
上面为元素的具体坐标,假如将要填入的位置是(2,1),那么那么主对角线的元素为(1,0)(2,1)(3,2);附对角线的元素为(0,3)(1,2)(2,1) (3,0);
当前(2,1)坐标为(x,y),对角线上元素的坐标为(i, j)那么可以发现:
主对角线与当前要填入的位置上的数字的行与列的规律为
y - x = j - i
附对角线与当前要填入的位置上的数字的行与列的规律为
y + x = j + i
这样我们便可以在循环中遍历的时候利用上面的行与列的关系就可以知道对角线上是否有元素了
private static boolean check(int row, int col){
for(int i = 0; i < row; i++){
if(rec[i] - i == col - row || rec[i] + i == col + row || rec[i] == col){
return false;
}
}
return true;
}