八皇后

八皇后,用回溯。

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

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

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

归零。


//主要是为了测试 回溯法,所以采用简单的
#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];
}


 

你可能感兴趣的:(数据结构,算法)