N皇后非递归解法

发布时间 2023-10-29 20:53:39作者: -她的梦-

#include<iostream>
#include<cmath>
using namespace std;
#define N 8
int q[N+1];
int check(int hang){
//该方法判断hang所在列是否合法
for(int i=1;i<hang;i++){
if(q[hang]==q[i]||abs(hang-i)==abs(q[hang]-q[i])){
return 0;
}
}
return 1;
}
//N皇后的非递归解法
void queen(){
int j = 1;//从第一行开始
int result = 0;//用于计数,有多少组解
while(j>=1){
q[j] = q[j] + 1;
while(q[j]<=N && !check(j)){
q[j] = q[j] + 1;
}
//说明第j行的皇后合法
if(q[j]<=N){
if(j==N){
//得到一组解
result = result +1;
cout<<"第"<<result<<"组解如下"<<endl;
for(int i=1;i<=N;i++){
cout<<"q["<<i<<"] = "<<q[i]<<"\t";
}
cout<<endl;
}
else{
j = j +1;
}
}//如果第j行的皇后不合法
else{
q[j] = 0;
j = j - 1;
}
}
}
int main(){
queen();
return 0;
}