八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:
在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
#include
#include
#include
using namespace std;
class Queen
{
public:
int count;
Queen(int num);
~Queen();
void showQueen(int n);
void setQueen(int x,int y);
bool isClash();
bool checkClash(int nRow);
void enumQueenPostion(int &nSloution);
void putQueen(int nRow, int &nSloution);
private:
//每一个数组元素代表一个皇后的位置,queenArr[0] = 4;第一行第五格
int len;
int *queenArr;
};
Queen::Queen(int num)
{
this->len = num;
this->queenArr = (int*)malloc(sizeof(int)*num);
memset(this->queenArr,0,sizeof(int)*num);
}
Queen::~Queen()
{
delete[]queenArr;
}
//打印每一种可能情况
void Queen::showQueen(int n)
{
cout << "***************Queen position,