n皇后位运算版
1 |
|
回溯法
- 用数组c[row]表示第row行放置在第i列,check()函数检查是否满足条件,满足则放置下一行,否侧继续循环找到可放置的解或者回溯
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using namespace std;
int total = 0;
int n;
int c[17];
int check(int cow){
for(int i = 0; i < cow; i++){
if(c[cow] == c[i]||abs(c[cow] - c[i]) == cow - i)
return 0;
}
return 1;
}
int queen(int cow){
if(cow == n) total++;
else{
for(int i = 0; i < n; i++){
c[cow] = i;
if(check(cow))
queen(cow+1);
}
}
return 0;
}
int main(){
cin >> n;
queen(0);
cout << total;
return 0;
}