1. 程式人生 > >深度優先搜尋判斷對角線是否有元素的問題

深度優先搜尋判斷對角線是否有元素的問題

1. 在深度優先搜尋的例題中,比如像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;
    }