@@ -3,38 +3,40 @@ const input = +require('fs')
33 . toString ( )
44 . trim ( ) ;
55
6- function solution ( input ) {
7- const N = input ;
6+ function solution ( N ) {
87 let count = 0 ;
8+ const column = Array ( N ) . fill ( false ) ;
9+ const diagonal1 = Array ( 2 * N - 1 ) . fill ( false ) ;
10+ const diagonal2 = Array ( 2 * N - 1 ) . fill ( false ) ;
911
10- function backTrack ( y , x , idx , map ) {
11- if ( idx === N ) {
12+ function backTrack ( row ) {
13+ if ( row === N ) {
1214 count ++ ;
1315 return ;
1416 }
1517
16- for ( let i = 0 ; i < N ; i ++ ) {
17- map [ y ] [ i ] = 1 ;
18- map [ i ] [ x ] = 1 ;
19- if ( y + i < N && x + i < N ) map [ y + i ] [ x + i ] = 1 ;
20- if ( y - i >= 0 && x - i >= 0 ) map [ y - i ] [ x - i ] = 1 ;
21- if ( y + i < N && x - i >= 0 ) map [ y + i ] [ x - i ] = 1 ;
22- if ( y - i >= 0 && x + i < N ) map [ y - i ] [ x + i ] = 1 ;
23- }
18+ for ( let col = 0 ; col < N ; col ++ ) {
19+ if (
20+ column [ col ] ||
21+ diagonal1 [ row + col ] ||
22+ diagonal2 [ row - col + ( N - 1 ) ]
23+ ) {
24+ continue ;
25+ }
2426
25- for ( let i = 0 ; i < N ; i ++ ) {
26- const nextY = y + 1 ;
27- if ( nextY < N && map [ nextY ] [ i ] === 0 ) backTrack ( nextY , i , idx + 1 , map ) ;
28- else break ;
29- }
30- }
27+ column [ col ] = true ;
28+ diagonal1 [ row + col ] = true ;
29+ diagonal2 [ row - col + ( N - 1 ) ] = true ;
3130
32- for ( let i = 0 ; i < N ; i ++ ) {
33- for ( let j = 0 ; j < N ; j ++ ) {
34- const chessMap = Array . from ( { length : N } , ( ) => Array ( N ) . fill ( 0 ) ) ;
35- backTrack ( i , j , 1 , chessMap ) ;
31+ backTrack ( row + 1 ) ;
32+
33+ column [ col ] = false ;
34+ diagonal1 [ row + col ] = false ;
35+ diagonal2 [ row - col + ( N - 1 ) ] = false ;
3636 }
3737 }
38+
39+ backTrack ( 0 ) ;
3840 return count ;
3941}
4042
0 commit comments