Skip to content

Commit 46ab83f

Browse files
Add 52 in c language
1 parent 98b6666 commit 46ab83f

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

c/52-n-queens-ii.c

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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+
}

0 commit comments

Comments
 (0)