我是一个C++初学者,控制台实现了一个八皇后问题。
代码如下:
//"八皇后问题"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;}本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139475.htm