Skip to content

Commit bb02fb9

Browse files
添加 0052.N皇后II.md C语言解法
1 parent d01fb8c commit bb02fb9

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

problems/0052.N皇后II.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,5 +143,65 @@ var totalNQueens = function(n) {
143143
return count;
144144
};
145145
```
146+
147+
C
148+
```c
149+
//path[i]为在i行,path[i]列上存在皇后
150+
int *path;
151+
int pathTop;
152+
int answer;
153+
//检查当前level行index列放置皇后是否合法
154+
int isValid(int index, int level) {
155+
int i;
156+
//updater为若斜角存在皇后,其所应在的列
157+
//用来检查左上45度是否存在皇后
158+
int lCornerUpdater = index - level;
159+
//用来检查右上135度是否存在皇后
160+
int rCornerUpdater = index + level;
161+
for(i = 0; i < pathTop; ++i) {
162+
//path[i] == index检查index列是否存在皇后
163+
//检查斜角皇后:只要path[i] == updater,就说明当前位置不可放置皇后。
164+
//path[i] == lCornerUpdater检查左上角45度是否有皇后
165+
//path[i] == rCornerUpdater检查右上角135度是否有皇后
166+
if(path[i] == index || path[i] == lCornerUpdater || path[i] == rCornerUpdater)
167+
return 0;
168+
//更新updater指向下一行对应的位置
169+
++lCornerUpdater;
170+
--rCornerUpdater;
171+
}
172+
return 1;
173+
}
174+
175+
//回溯算法:level为当前皇后行数
176+
void backTracking(int n, int level) {
177+
//若path中元素个数已经为n,则证明有一种解法。answer+1
178+
if(pathTop == n) {
179+
++answer;
180+
return;
181+
}
182+
183+
int i;
184+
for(i = 0; i < n; ++i) {
185+
//若当前level行,i列是合法的放置位置。就将i放入path中
186+
if(isValid(i, level)) {
187+
path[pathTop++] = i;
188+
backTracking(n, level + 1);
189+
//回溯
190+
--pathTop;
191+
}
192+
}
193+
}
194+
195+
int totalNQueens(int n){
196+
answer = 0;
197+
pathTop = 0;
198+
path = (int *)malloc(sizeof(int) * n);
199+
200+
backTracking(n, 0);
201+
202+
return answer;
203+
}
204+
```
205+
146206
-----------------------
147207
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

0 commit comments

Comments
 (0)