N皇后问题中遍历二维数组

Traversing the 2D array in the N-Queens problem

我正在尝试使用回溯法解决 N-Queens 问题。 N 皇后问题的 link 可以在这里找到,https://leetcode.com/problems/n-queens/ 请访问那个 link 以更好地理解这个问题。但是,我只想分享一部分我觉得难以理解的代码。请有人向我解释 //check top, //check top - left, // check-top right 是如何工作的。我发现很难理解代码的这个特定部分。

var isValid = function(board, row, col) {
    const n = board.length;
    
    // check top
    for (let i = 0; i < row; i++) {
        if (board[i][col] === 'Q') return false; 
    }
    
    // check top-left
    for (let i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
        if (board[i][j] === 'Q') return false;
    }
    
    // check top-right
    for (let i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {
        if (board[i][j] === 'Q') return false;
    }
    
    return true;
}

据我了解,我们需要检查当前位置是否“安全”。所以场上没有皇后能打到位。 为此,我们需要检查垂直、水平和对角线(两者)。 此代码可能只检查当前行之上的行。

top-left 代码块执行以下操作: 想象一下,当前位置是 x=4,y=3。所以要检查 left-top 对角线,我们需要查看位置:

  • x=3,y=2
  • x=2,y=1
  • x=1,y=0

为此,我们最初 select 位置 let i = row - 1, j = col - 1(从当前位置向左一步和顶部一步)。 然后对于下一步,移动 top-and-left: i--, j--

重复直到达到边界:i >= 0 && j >= 0

top-right 块执行相同的操作,除了我们应该向右移动(增加 X)。