八皇后问题

八皇后问题

 1 //八皇后递归解法
 2 #include<iostream>
 3 using namespace std;
 4 int queen[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1};
 5 int count=0;
 6 bool available(int pointi,int pointj){//判断某个皇后是否与已有皇后冲突
 7     for(int i=1;i<pointi;i++){
 8         if(pointj==queen[i])return false;//同一列拒绝
 9         if((pointi-i)==(pointj-queen[i]))return false;//同一主对角线拒绝
10         if((pointi-i)+(pointj-queen[i])==0)return false;//同一副对角线拒绝
11     }
12     return true;
13 }
14 void findSpace(int queenNumber){//在第queenNumber行找能放皇后的位置
15     for(int i=1;i<9;i++){//从1~8遍历这一行的八个空位
16         if(available(queenNumber,i)){
17 //如果可以放这个位置就记录下第queenNumber个皇后的位置
18             queen[queenNumber]=i;
19             if(queenNumber==8){//如果八个皇后都放满了统计一下
20                 count++;
21                 return;
22             }
23             int nextNumber=queenNumber+1;//还有皇后没放递归放下一个皇后
24             findSpace(nextNumber);
25         }
26     }
27     queen[--queenNumber]=-1;//如果这一行没有可放的位置说明上一行皇后放的位置不行,要为上一个皇后寻找新的可放位置
28     return;
29 }
30 int main(){
31     findSpace(1);//从(1,1)开始递归
32     cout<<count<<endl;
33     return 0;
34 }

 

posted @ 2019-04-17 16:27 M_x_j 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值