@@ -50,4 +50,55 @@ var isValid = function(row, columnForRow){
5050}
5151
5252return true ;
53- }
53+ }
54+
55+
56+
57+
58+ // Another Solution
59+ var solveNQueens = function ( n ) {
60+ var sol = [ ] ;
61+ solveNQueensAux ( n , 0 , new Set ( ) , new Set ( ) , new Set ( ) , [ ] , sol ) ;
62+ return parseSolutions ( sol , n ) ;
63+ } ;
64+
65+ var solveNQueensAux = function ( n , row , diagonalDiffs , diagonalSums , cols , currentSol , sol ) {
66+ if ( row == n ) {
67+ sol . push ( currentSol ) ;
68+ return ;
69+ }
70+
71+ for ( var i = 0 ; i < n ; i ++ ) {
72+ const diagonalDiff = i - row ;
73+ const diagonalSum = i + row ;
74+ if ( ! diagonalDiffs . has ( diagonalDiff ) && ! cols . has ( i ) && ! diagonalSums . has ( diagonalSum ) ) {
75+ diagonalDiffs . add ( diagonalDiff ) ;
76+ diagonalSums . add ( diagonalSum ) ;
77+ cols . add ( i ) ;
78+ solveNQueensAux ( n , row + 1 , diagonalDiffs , diagonalSums , cols , [ ...currentSol , ...[ [ row , i ] ] ] , sol ) ;
79+ cols . delete ( i ) ;
80+ diagonalDiffs . delete ( diagonalDiff ) ;
81+ diagonalSums . delete ( diagonalSum ) ;
82+ }
83+ }
84+ return ;
85+ }
86+
87+ var parseSolutions = function ( sols , n ) {
88+ var matrixes = [ ] ;
89+ for ( var i = 0 ; i < sols . length ; i ++ ) {
90+ var sol = sols [ i ] ;
91+ var matrix = [ ] ;
92+ for ( var row = 0 ; row < n ; row ++ ) {
93+ matrix [ row ] = [ ]
94+ const queenPos = sol [ row ] ;
95+ for ( var col = 0 ; col < n ; col ++ ) {
96+ matrix [ row ] += ( queenPos [ 1 ] == col ) ?"Q" :"." ;
97+ }
98+ }
99+
100+ matrixes . push ( matrix ) ;
101+ }
102+
103+ return matrixes ;
104+ }