//8皇后(回溯法)
#include <iostream>
using namespace std;
void queen_all(int k);//回溯的算法函数
int col[9];
bool row[9], digLeft[17], digRight[17];
int main()
{
int j;
for (j = 0; j <= 8; j++) row[j] = true;
for (j = 0; j <= 16; j++) digLeft[j] = digRight[j] = true;
queen_all(1);
return 0;
}
//8*8棋盘的第K列上找合理的配置
void queen_all(int k)
{
int i, j;
char awn; //存储是否继续寻找的标志
for (i = 1; i <= 8;i++) //依次在1至8行上配置K列的皇后
if (row[i] && digLeft[k+i-1] && digRight[8+k-i]){ //可行位置
col[k] = i; //表示位置为K列的i行
row[i] = digLeft[k+i-1] = digRight[8+k-i] = false; //表示置有皇后
if (k == 8){ //找到一个可行解
for (j = 1; j <= 8; j++)
cout << j << " " << col[j] << '\t'; //列和行
cout << endl << "是否需要继续寻找(Q--表示退出,其他继续:)";
cin >> awn;
if (awn == 'Q'|| awn == 'q') exit(0);
}
else queen_all(k + 1); //递归至k+1列
row[i] = digLeft[k+i-1] = digRight[8+k-i] = true; //为下个可行方案做准备
}
}
8皇后问题(回溯法)
原文作者:回溯法
原文地址: https://blog.csdn.net/qq_39026129/article/details/79674131
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/qq_39026129/article/details/79674131
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。