我是一个C++初学者,控制台实现了一个八皇后问题。
代码如下:
//"八皇后问题"V1.0
//李国良于2017年1月11日编写完成
#include
#include
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 = 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;="" true;="" void="" output(bool="" arr[arsize][arsize])="" ++num;="" cout="" <<="" "**********************"="" num="" "*********************"="" endl;="" for="" (int="" i="0;" <="" arsize;="" ++i)="" j="0;" ++j)="" arr[i][j]="" "="" ";="" "*********************************************"="" }
:http://www.linuxidc.com/Linux/2017-01/139475.htm