八皇后问题c++代码递归回溯实例及运行结果

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法

 

具体分析可见程序员面试宝典

c++代码

#include 

using namespace std;

static char eightQueen[8][8];//8*8的布局
static int columnConflict[8];//标记列冲突
static int mainDiagonalLine[15];//标记主对角线冲突
static int counterDiagonalLine[15];//标记副对角线冲突
static int eightQueenNum=0;//标记一共多少种摆法

void rowNum(int i)//i表示行数
{
    int iColumn;
    for(iColumn=0;iColumn<8;iColumn++)
    {
        //如果无冲突
        if(columnConflict[iColumn]==0&&mainDiagonalLine[i-iColumn+7]==0&&counterDiagonalLine[i+iColumn]==0)
        {
            eightQueen[i][iColumn]='*';//放皇后
            columnConflict[iColumn]=1;//下一次该列上不能放皇后
            mainDiagonalLine[i-iColumn+7]=1;//下一次该主对角线不能放皇后
            counterDiagonalLine[i+iColumn]=1;//下一次该副对角线不能放皇后
            if(i<7)
                rowNum(i+1);//递归遍历
            else
            {//打印
                int iRow,iColumn;
                cout<<"第"<<++eightQueenNum<<"种状态为"<

运行结果

八皇后问题c++代码递归回溯实例及运行结果_第1张图片


你可能感兴趣的:(程序员面试宝典)