C++递归问题之二——n皇后问题:以四、八皇后为例,给定n个皇后要求将它们放在一个n维矩阵中,任意两个皇后不能出现在同一行、列、主副对角线上,输出具体的摆放方式

#include
using namespace std;
class Queen{
public:
 Queen(){}
 Queen(int i):Qnum(i){}
 ~Queen(){}
 void SetQnum(int i){
  Qnum=i;
 }
 void FindPos();
private:
 enum{MAX=10};
 int col[MAX];
 int M[2*MAX];
 int S[2*MAX];
 int matrix[MAX][MAX];
 int Qnum;
 int count;
 void Find(int i);
 void Init();
};
void Queen::FindPos(){
 Init();
 Find(0);
}
void Queen::Init(){
 count=0;
 for(int i=0;i   col[i]=0;
  for(int j=0;j  }
 for(i=0;i<2*MAX;++i)M[i]=S[i]=0;
}
void Queen::Find(int i){
 for(int j=0;j   if(col[j]==0&&M[i-j+Qnum-1]==0&&S[i+j]==0){//列、主对角线、辅对角线,-1起标示作用在矩阵中表示放皇后的位置
   col[j]=-1;
   M[i-j+Qnum-1]=-1;
   S[i+j]=-1;
   matrix[i][j]=-1;
   if(i    else{
    cout<<"No."<<++count<<" result:"<     for(int iL=0;iL      for(int jC=0;jC       cout<      cout<     }
    cout<    }
   col[j]=0;
   M[i-j+Qnum-1]=0;
   S[i+j]=0;
   matrix[i][j]=0;
  }
 }
}
int main(){
 cout<<"Input the num of queen:"<  int num;
 cin>>num;
 Queen obj(num);
 obj.FindPos();
 return 0;
}

你可能感兴趣的:(C++)