#include <iostream>

using namespace std;

const int BOUND = 8;

void queen(int (*)[BOUND], int);
int abs(int);
void print(int (*)[BOUND]);

int main()
{
    int chessboard[BOUND][BOUND] = {0};  // 定义棋盘,置初值为0
    queen(chessboard, 0);  //调用八皇后程序.
    return 0;
}

int abs(int x)
{
    return x > 0 ? x: -x;
}

void print(int (*matrix)[BOUND])
{
    int i, j;
    for (i = 0; i < BOUND; i++)
    {
        for (j = 0; j < BOUND; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
    }
}

void queen(int (*chess)[BOUND], int col)  //col为当前皇后所在列
{
    if (col >= BOUND)
    {
        print(chess);
        cout << endl;
    }
    else
    {
        int row = 0;
        while (row < BOUND)   //遍历每一行,如果有适当位置,则插入皇后.
        {
            if (col == 0)    //若所在列为第1列,则皇后可以随便安置.
            {
                chess[row][col] = 1;
                queen(chess, col + 1);
            }
            else
            {
                int i, j, flag = 0;
                for (i = 0; i <= BOUND; i++) //判断当前列是否能安置皇后
                {
                    for (j = 0; j < col; j++)
                    {
                        if ( (i == row || abs(i - row) == abs(j - col) ) && chess[i][j] == 1 )
                            flag = 1;
                    }
                    if (flag)
                        break;
                }
                if (!flag) //如果flag为0,则表明当前位置可以安置.
                {
                    chess[row][col] = 1;
                    queen(chess, col + 1);//调用下一列.
                }
                chess[row][col] = 0; //如果第col+1列没有适当位置,则置第row行col列的值为0,继续搜索下一行.
            }
            row++;
        }
    }
    
}

以上算法我觉得似乎没什么错误,但奇怪的是,运行后什么结果都没有.怎么会这样子的?