1
+ /* https://leetcode.com/problems/n-queens/description/
2
+
3
+ Example:
4
+
5
+ Input: 4
6
+ Output: [
7
+ [".Q..", // Solution 1
8
+ "...Q",
9
+ "Q...",
10
+ "..Q."],
11
+
12
+ ["..Q.", // Solution 2
13
+ "Q...",
14
+ "...Q",
15
+ ".Q.."]
16
+ ]
17
+ Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above.
18
+ */
19
+
20
+ /**
21
+ * @param {number } n
22
+ * @return {string[][] }
23
+ */
24
+ var solveNQueens = function ( n ) {
25
+ var sol = [ ] ;
26
+ solveNQueensAux ( n , 0 , new Set ( ) , new Set ( ) , new Set ( ) , [ ] , sol ) ;
27
+ return parseSolutions ( sol , n ) ;
28
+ } ;
29
+
30
+ var solveNQueensAux = function ( n , row , diagonalDiffs , diagonalSums , cols , currentSol , sol ) {
31
+ if ( row == n ) {
32
+ sol . push ( currentSol ) ;
33
+ return ;
34
+ }
35
+
36
+ for ( var i = 0 ; i < n ; i ++ ) {
37
+ const diagonalDiff = i - row ;
38
+ const diagonalSum = i + row ;
39
+ if ( ! diagonalDiffs . has ( diagonalDiff ) && ! cols . has ( i ) && ! diagonalSums . has ( diagonalSum ) ) {
40
+ diagonalDiffs . add ( diagonalDiff ) ;
41
+ diagonalSums . add ( diagonalSum ) ;
42
+ cols . add ( i ) ;
43
+ solveNQueensAux ( n , row + 1 , diagonalDiffs , diagonalSums , cols , [ ...currentSol , ...[ [ row , i ] ] ] , sol ) ;
44
+ cols . delete ( i ) ;
45
+ diagonalDiffs . delete ( diagonalDiff ) ;
46
+ diagonalSums . delete ( diagonalSum ) ;
47
+ }
48
+ }
49
+ return ;
50
+ }
51
+
52
+ var parseSolutions = function ( sols , n ) {
53
+ var matrixes = [ ] ;
54
+ for ( var i = 0 ; i < sols . length ; i ++ ) {
55
+ var sol = sols [ i ] ;
56
+ var matrix = [ ] ;
57
+ for ( var row = 0 ; row < n ; row ++ ) {
58
+ matrix [ row ] = [ ]
59
+ const queenPos = sol [ row ] ;
60
+ for ( var col = 0 ; col < n ; col ++ ) {
61
+ matrix [ row ] += ( queenPos [ 1 ] == col ) ? "Q" : "." ;
62
+ }
63
+ }
64
+
65
+ matrixes . push ( matrix ) ;
66
+ }
67
+
68
+ return matrixes ;
69
+ }
70
+
71
+ var printMatrixes = function ( matrixes , n ) {
72
+ console . log ( "Start solution of n: " + n ) ;
73
+ for ( var i = 0 ; i < matrixes . length ; i ++ ) {
74
+ printMatrix ( matrixes [ i ] ) ;
75
+ }
76
+ console . log ( "End solution of n: " + n ) ;
77
+ }
78
+
79
+ var printMatrix = function ( matrix ) {
80
+ console . log ( "------------" ) ;
81
+ for ( var i = 0 ; i < matrix . length ; i ++ ) {
82
+ console . log ( matrix [ i ] ) ;
83
+ }
84
+ console . log ( "------------" ) ;
85
+ }
86
+
87
+ var main = function ( n ) {
88
+ printMatrixes ( solveNQueens ( 4 ) , 4 ) ;
89
+ printMatrixes ( solveNQueens ( 5 ) , 5 ) ;
90
+ printMatrixes ( solveNQueens ( 6 ) , 6 ) ;
91
+ }
92
+ main ( ) ;
0 commit comments