当前位置:网站首页>N皇后问题
N皇后问题
2022-07-19 12:29:00 【七倾】
题目:
八皇后问题:
在一个国际象棋棋盘上放八个皇后,使得任何两个皇后之间不相互攻击,求出所有
的布棋方法。上机运行并检验结果。
思考:将此题推广到 N皇后的情况,检验在 N比较大的情况下,比方说 N=16的时
候,你的程序能否快速的求出结果,如果不能,思考有什么方法能够优化算法。
#include <iostream>
using namespace std;
#define max 50
int x[max + 1];//第i行的皇后放在第x[i]列上
int n;//棋盘宽度以及皇后数量
int sum = 0;//计算解的数量
//即将放入的皇后坐标为(row,col),判断是否能够放置
bool Place(int row, int col) {
for (int i = 1; i < row; i++) //比较之前row -1行已经放置的皇后aax
{
if (col == x[i] || abs(row - i) == abs(col - x[i])) //判断即将放的皇后与已经存在的皇后们是否处于同一列或同一斜线
return false;
}
return true;
}
//递归的回溯函数,若满足条件则往下递归,若不满足条件,则往前回溯
void Backtrack(int t, int n) {
if (t == n + 1) //成功将全部棋盘遍历了一次,形成了一个解
sum++;
else {
// 若这一行遍历到n仍不能放置皇后,则向前回溯
for (int i = 1; i <= n; i++) {
x[t] = i;
if (Place(t, x[t]))//判断是否能放置皇后
Backtrack(t + 1, n);//若这一行能放置皇后,则向下一行进行递归
}
}
}
int main()
{
cout << "请输入皇后的数量: ";
cin >> n;
Backtrack(1, n);
cout << "解的个数为: " << sum << endl;
return 0;
}
测试图:
边栏推荐
猜你喜欢
随机推荐
Research on the best implementation scheme of feign
npm warn config global `--global`, `--local` are deprecated. use `--location 解决方法
函數遞歸習題(easy版)
Feign 最佳实现方案探究
2022.7.10-----leetcode. seven hundred and forty-one
The resources in the target folder cannot be loaded by the program
解决div适应屏幕的一个思路
New solutions to go points (II) map solution
TFIDF实例及讲解
婚恋交友网站开发社交聊天平台代码分享(三)
[pkusc2018] main fighting ground of provincial selection and special training
机器学习(1)环境配置
MindSpore serving是否支持热加载,避免推理服务中断
Global 1000+ researchers train super large models live on twitter??
Graphic explanation redis cluster and expansion
Socket error Event: 32 Error: 10053. Connection closing...Socket close
Pymongo迁移MongoDB数据库的数据
请问,现在有什么短期的理财产品值得买?
爱线段树的好孩子【九校2D1T3】优美序列
SCCM2012R2网络部署重装系统