八皇后问题:规则是皇后不能处于对角线,切皇后不能挨着
递归回溯法 求八皇后问题解的个数
1 #include <cstdio>
2 #include <vector>
3 using namespace std;
4 const int maxn = 1003;
5
6 int n,sum = 0;
7 vector<int> a;
8
9 bool isValid(int k,int i){
10 bool flag =true;
11 for(int kp=1;kp<a.size();kp++){
12 if(a[kp]==i||abs(a[kp]-i)==abs(kp-k)){
13 flag=false;
14 break;
15 }
16 }
17 return flag;
18 }
19
20 void queen(int k){
21 if(k>n){
22 sum++;
23 a.pop_back();
24 return;
25 }
26 for(int i=1;i<=n;i++){
27 if(isValid(k,i)){
28 a.push_back(i);
29 queen(k+1);
30 }
31 }
32 a.pop_back();
33 }
34
35 int main(){
36 a.push_back(-1);
37 printf("please input...
");
38 scanf("%d",&n);
39 queen(1);
40 printf("the number of the solution %d
",sum);
41 }