八皇后

#include 
using namespace std;

#define N   8

#define ABS(a, b) ((a) > (b) ? ((a) - (b)) : ((b) - (a)))  //绝对值

int g_iCol[N] = { 0 };//用于存储第i行的皇后的列数。例:g_iCol[1] = 2;表示第1行的皇后放在第2列
int g_Count = 0;

bool CheckStatus(int iRow, int iColumn)
{
    for (int i = 0; i < iRow; i++)
    {
        if (iColumn == g_iCol[i] || ABS(i, iRow) == ABS(iColumn, g_iCol[i]))//同列 或者 同斜线
            return 0;
    }

    return 1;
}

void SolveQueen(int row)//行
{
    for (int column = 0; column < N; column++)//遍历row行中的每一列
    {
        if (CheckStatus(row, column))//判断是否满足插入的条件
        {
            g_iCol[row] = column;//满足的话 将皇后插入到 第 column 列

            if (row == N - 1)
            {

                g_Count++;
            }
            else
                SolveQueen(row + 1);//遍历下一行,如果没有找到放置的位置,则退出,进行第row行下一列放置
        }
    }
}

int main()
{
    SolveQueen(0);

    cout << g_Count;

    return 0;
}

你可能感兴趣的:(八皇后)