Estoy tratando de resolver el problema de N-Queens usando el retroceso. El enlace al problema de N-Queens se puede encontrar aquí, https://leetcode.com/problems/n-queens/ , visite ese enlace para comprender mejor el problema. Sin embargo, solo quiero compartir una parte del código que encuentro difícil de entender. Por favor, ¿alguien puede explicarme cómo funciona el //marque arriba, //marque arriba - izquierda, //marque arriba a la derecha? Me resulta difícil entender esta sección particular del código.
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; }Según tengo entendido, debemos verificar si la posición actual es "segura". Así que no hay reinas en el campo que puedan alcanzar la posición. Para hacerlo, debemos marcar Vertical, Horizontal y Diagonales (ambos). Este código probablemente verifica solo las filas por encima de la actual.
El bloque de código superior izquierdo hace lo siguiente: imagina que la posición actual es x=4, y=3. Entonces, para verificar la diagonal superior izquierda, debemos observar las posiciones:
Para hacerlo, seleccionamos inicialmente la posición let i = row - 1, j = col - 1 (un paso a la izquierda y uno arriba del actual). Y luego, para cada paso siguiente, muévase hacia arriba y hacia la izquierda: i--, j--
Repítalo hasta que llegue al borde: i >= 0 && j >= 0
El bloque superior derecho realiza la misma operación, excepto que debemos movernos hacia la derecha (aumentar la X).