# 用C++实现的八皇后问题

2017-01-12 07:46:05来源:cnblogs.com作者:勇敢的蜂人点击

### 代码如下：

``//"八皇后问题"V1.0//李国良于2017年1月11日编写完成#include <iostream>#include <Windows.h>using namespace std;const int ArSize = 8;//这个数等于几，就是几皇后。int num = 0;void solve(bool arr[ArSize][ArSize], int row);bool check(bool arr[ArSize][ArSize], int row, int column);void outPut(bool arr[ArSize][ArSize]);int main(){    SetConsoleTitle("八皇后问题");    bool chessboard[ArSize][ArSize];    for (auto &i : chessboard)    {        for (auto &j : i)        {            j = false;        }    }    solve(chessboard, 0);    cout << "八皇后问题共有" << num << "种解！" << endl;    system("pause");    return 0;}void solve(bool arr[ArSize][ArSize], int row){    for (int column = 0; column < ArSize; ++column)    {        arr[row][column] = true;        if (check(arr, row, column))        {            if (row + 1 == ArSize)            {                outPut(arr);            }            else            {                solve(arr, row + 1);            }        }        arr[row][column] = false;    }}bool check(bool arr[ArSize][ArSize], int row, int column){    if (row == 0)    {        return true;    }    int i, j;    for (i = 0; i < row; ++i)    {        if (arr[i][column])        {            return false;        }    }    i = row - 1;    j = column - 1;    while (i >= 0 && j >= 0)    {        if (arr[i][j])        {            return false;        }        --i;        --j;    }    i = row - 1;    j = column + 1;    while (i >= 0 && j <= ArSize - 1)    {        if (arr[i][j])        {            return false;        }        --i;        ++j;    }    return true;}void outPut(bool arr[ArSize][ArSize]){    ++num;    cout << "**********************" << num << "*********************" << endl;    for (int i = 0; i < ArSize; ++i)    {        for (int j = 0; j < ArSize; ++j)        {            cout << arr[i][j] << " ";        }        cout << endl;    }    cout << "*********************************************" << endl;}``

