mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-19 01:55:51 +08:00
66 lines
1.3 KiB
JavaScript
66 lines
1.3 KiB
JavaScript
class NQueen {
|
|
constructor (size) {
|
|
this.board = new Array(size).fill('.').map(() => new Array(size).fill('.'))
|
|
this.size = size
|
|
}
|
|
|
|
isValid ([row, col]) {
|
|
// function to check if the placement of the queen in the given location is valid
|
|
|
|
// checking the left of the current row
|
|
for (let i = 0; i < col; i++) {
|
|
if (this.board[row][i] === 'Q') return false
|
|
}
|
|
|
|
// checking the upper left diagonal
|
|
for (let i = row, j = col; i >= 0 && j >= 0; i--, j--) {
|
|
if (this.board[i][j] === 'Q') return false
|
|
}
|
|
|
|
// checking the lower left diagonal
|
|
for (let i = row, j = col; j >= 0 && i < this.size; i++, j--) {
|
|
if (this.board[i][j] === 'Q') return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
solve (col = 0) {
|
|
// function to solve the board
|
|
if (col >= this.size) { return true }
|
|
|
|
for (let i = 0; i < this.size; i++) {
|
|
if (this.isValid([i, col])) {
|
|
this.board[i][col] = 'Q'
|
|
|
|
if (this.solve(col + 1)) { return true }
|
|
|
|
// backtracking
|
|
this.board[i][col] = '.'
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
printBoard () {
|
|
// utility function to display the board
|
|
for (const row of this.board) {
|
|
console.log(...row)
|
|
}
|
|
}
|
|
}
|
|
|
|
function main () {
|
|
const board = new NQueen(8)
|
|
|
|
board.printBoard()
|
|
console.log('\n')
|
|
|
|
board.solve()
|
|
|
|
board.printBoard()
|
|
}
|
|
|
|
main()
|