当前位置: 编程技术>c/c++/嵌入式
C++实现八皇后问题的方法
来源: 互联网 发布时间:2014-10-28
本文导语: 本文实例展示了C++实现八皇后问题的方法,是数据结构与算法中非常经典的一个算法。分享给大家供大家参考之用。具体方法如下: 一般在八皇后问题中,我们要求解的是一个8*8的国际象棋棋盘中,放下8个皇后且互相不能攻...
本文实例展示了C++实现八皇后问题的方法,是数据结构与算法中非常经典的一个算法。分享给大家供大家参考之用。具体方法如下:
一般在八皇后问题中,我们要求解的是一个8*8的国际象棋棋盘中,放下8个皇后且互相不能攻击的排列总数。皇后的攻击范围为整行,整列,以及其斜对角线。
由于皇后的攻击范围特性,注定我们每行只能放下一个皇后,于是我们要做的只是逐行放下皇后。八皇后问题是回溯法的典型问题。这里我们用的方法很简单:
从第一行开始逐个检索安全位置摆放皇后,一旦有安全位置则考虑下一行的安全位置。如果发现某行没有安全位置,则返回上一行继续检索安全位置;如果发现在最后一行找到了安全位置则输出整个棋盘。
原理很简单,整个程序中表现了这个思想的函数是void Solve()
下面是实现的代码:
//八皇后问题的实现
#include
#include
using namespace std;
//QueenChess类声明
class QueenChess
{
public:
QueenChess(); //构造函数
void Solve(); //求解八皇后问题,并给出放置成功的棋盘总个数
private:
string chessState[8]; //用于存放棋盘状态
int solves; //八个皇后放置成功的棋盘解的总个数
bool SafeJudge(int row,int col) const; //判断位置(row,col)是否安全
void PlaceQueen(int row); //在第row行放置一个皇后
void DrawChess() const; //打印八个皇后放置成功的棋盘
};
//构造函数,将棋盘初始化
QueenChess::QueenChess()
{
solves=0;
int i=0,j=0;
for(;i