forked from TheAlgorithms/JavaScript
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNQueens.js
More file actions
Latest commit
67 lines (55 loc) · 1.43 KB
/
Copy pathNQueens.js
File metadata and controls
67 lines (55 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
classNQueens{
constructor(size){
if(size<0){
throwRangeError('Invalid board size')
}
this.board=newArray(size).fill('.').map(()=>newArray(size).fill('.'))
this.size=size
this.solutionCount=0
}
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(leti=0;i<col;i++){
if(this.board[row][i]==='Q')returnfalse
}
// checking the upper left diagonal
for(leti=row,j=col;i>=0&&j>=0;i--,j--){
if(this.board[i][j]==='Q')returnfalse
}
// checking the lower left diagonal
for(leti=row,j=col;j>=0&&i<this.size;i++,j--){
if(this.board[i][j]==='Q')returnfalse
}
returntrue
}
placeQueen(row,col){
this.board[row][col]='Q'
}
removeQueen(row,col){
this.board[row][col]='.'
}
solve(col=0){
if(col>=this.size){
this.solutionCount++
returntrue
}
for(leti=0;i<this.size;i++){
if(this.isValid([i,col])){
this.placeQueen(i,col)
this.solve(col+1)
this.removeQueen(i,col)
}
}
returnfalse
}
printBoard(output=(value)=>console.log(value)){
if(!output._isMockFunction){
output('\n')
}
for(constrowofthis.board){
output(row)
}
}
}
export{NQueens}