八皇后

八皇后,用回溯。

可以这么想象,一个八层的楼房,每一层有八个楼梯可以下去。

循环,如果这个楼梯可以下去,那么记录,并下去。

如果到了底部,那么输出。

归零。


//主要是为了测试 回溯法,所以采用简单的
#include <iostream>
using namespace std;
int a[9]={0}; // 0代表没放,1 - 9 分别代表放的位置
int all=0; //all
int abs(int h){
    if (h>=0)return h;
    else {return -h;}
}
bool ok(int qian,int num){  //qian 值的是这次行数,num是放的数
              // 如果num 和qian的每个对应位置 有相同,则不行。
     if(qian==1)return true;
     bool flag= true;
     for(int j=1;j<qian;j++){
        if(a[j]==num)flag=false;
        if(qian-j==abs(num-a[j]))flag=false;
     }
      return flag;
}
void queen(int i){

    for(int j=1;j<=8;j++)
    {
       if(ok(i,j)){ //如果可以
            a[i]=j; //记录 ,下楼
            queen(i+1);//下楼
       }
    }
      if (i==8 &&a[8]!=0){
        for(int j=1;j<=8;j++)cout<<a[j]<<" ";

        cout<<"\n";
        a[0]+=1;//到底层输出。
    }
    a[i]=0;
}

int main(){
    queen(1);
    cout<<a[0];
}



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值