File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change
1
+ /*
2
+ Given an integer n, return the number of distinct solutions to the n-queens puzzle.
3
+
4
+ Space: O(n²)
5
+ Time: ?
6
+ */
7
+
8
+ int min (int a , int b ){
9
+ return a < b ?a :b ;
10
+ }
11
+
12
+ int can_ce_placed (int i , int j , int n , int * * board ) {
13
+ for (int k = i - 1 ; k >=0 ; k -- )
14
+ if (board [k ][j ])
15
+ return false;
16
+ for (int k = j - 1 ; k >=0 ; k -- )
17
+ if (board [i ][k ])
18
+ return false;
19
+ int m = min (i , j )+ 1 ;
20
+ for (int k = 1 ; k < m ; k ++ )
21
+ if (board [i - k ][j - k ])
22
+ return false;
23
+ m = min (i + 1 , n - j );
24
+ for (int k = 1 ; k < m ; k ++ )
25
+ if (board [i - k ][j + k ])
26
+ return false;
27
+ return true;
28
+ }
29
+
30
+ int backtracking (int i , int n , int * * board ) {
31
+ if (i == n )
32
+ return 1 ;
33
+ int cpt = 0 ;
34
+ for (int k = 0 ; k < n ; k ++ ){
35
+ if (can_ce_placed (i , k , n , board )){
36
+ board [i ][k ] = 1 ;
37
+ cpt += backtracking (i + 1 , n , board );
38
+ board [i ][k ] = 0 ;
39
+ }
40
+ }
41
+ return cpt ;
42
+ }
43
+
44
+ int totalNQueens (int n ){
45
+ int * * board = malloc (sizeof (int * )* n );
46
+ for (int i = 0 ; i < n ; i ++ )
47
+ board [i ] = calloc (n , sizeof (int ));
48
+ int ans = backtracking (0 , n , board );
49
+ for (int i = 0 ; i < n ; i ++ )
50
+ free (board [i ]);
51
+ free (board );
52
+ return ans ;
53
+ }
You can’t perform that action at this time.
0 commit comments