说明:
- 与1.0相比,算法实质并无改变,主要是用面向对象的思想把它们封装起来了。但是个人感觉,这个问题并不是太适合。但是,面向对象的程序设计方法让程序看起来很有条理。
以下是详细的代码,如果大家有任何疑问,欢迎探讨。不过现在好像还没有资格这么说。
Nqueen.h
#include<vector>
using namespace std;
class Nqueen{
public:
Nqueen(int n);
void solveNqueen(int row);
void showSolutionNum();
private:
int N;//皇后数
int solutionNum;//解的个数
vector<int> v;//用来记录每一行皇后的位置;
bool checkPosition(int row,int col);
};
Nqueen.cpp
#include"Nqueen.h"
#include<iostream>
#include<vector>
using namespace std;
Nqueen::Nqueen(int n){
N=n;
vector<int> vc(n,0);
v=vc;
solutionNum=0;
}
void Nqueen::solveNqueen(int row){
for(int col=0;col<N;col++){
if(checkPosition(row,col)){
v[row]=col;
if(row==N-1){
solutionNum++;
return;
}
solveNqueen(row+1);
}
}
}
bool Nqueen::checkPosition(int row,int col){
for(int x=0;x<row;x++){
if(abs(row-x)==abs(col-v[x])||col==v[x])
return 0;
}
return 1;
}
void Nqueen::showSolutionNum(){
cout<<"The total solution number is: "<<solutionNum<<endl;
}
main.cpp
#include"Nqueen.h"
#include<iostream>
using namespace std;
int main(){
int queenNumber;
cout<<"please input the queen number:"<<endl;
cin>>queenNumber;
Nqueen eightQueen(queenNumber);
eightQueen.solveNqueen(0);
eightQueen.showSolutionNum();
return 0;
}