问题:N皇后问题是指在N*N的棋盘上摆放N个皇后,使得任意两个皇后都不在同一行、同一列或者同一斜线上,求满足这种摆放的解为多少个

解题思路:

(1)定义判断函数:不同行(每行只放置一个皇后);不同列(放置前进行遍历,即将放置的皇后与之前所有皇后所在列不同);不同斜线(放置前进行遍历,即将放置的皇后与之前所有皇后练成线的斜率不为±1)
(2)定义递归的回溯函数,并调用判断函数。若在该行遍历完n之前能够找到位置放置皇后,则向下一行递归,若没有位置,则向上回溯。如果棋盘所有行列寻找完毕,则解的个数+1

#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行已经放置的皇后{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;
}

回溯法之N皇后问题——C++代码相关推荐

  1. 回溯法求解N皇后问题(Java实现)

    回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题的解.这种迭代类似于穷举并且是试探性的,因为当目前的可 ...

  2. 回溯法求解N皇后问题及其时间复杂度分析

    回溯法求解N皇后问题及其时间复杂度分析 一.回溯法简介 1. 什么是回溯法? 2. 回溯法的时间复杂度分析 蒙特卡罗方法 蒙特卡罗方法在回溯法求解时间复杂度中的应用 二.回溯法求解N皇后问题 1. 回 ...

  3. 回溯法解决n皇后问题

    回溯法解决n皇后问题 题目要求: 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于在n×n格的棋盘上放置n个皇后, ...

  4. n皇后问题python_Python:回溯法解N皇后问题

    这个算法采用的是一维数组,皇后个数即数组长度,数组值即对应行皇后所在的列. 按照每行至上而下,每一行从第一列起尝试放置皇后,每次仅需判断对于已经放置的皇后是否产生冲突.如果某个位置可以放置,则放置皇后 ...

  5. 栈(Stack)的应用—试探回溯法:八皇后问题、迷宫寻径

    栈的应用 试探回溯法 1.八皇后问题 皇后类 struct Queen { //皇后类int x, y; //坐标Queen (int xx = 0, int yy = 0 ) : x(xx), y( ...

  6. 回溯法(八皇后问题)及C语言实现

    回溯法,又被称为"试探法".解决问题时,每进行一步,都是抱着试试看的态度,如果发现当前选择并不是最好的,或者这么走下去肯定达不到目标,立刻做回退操作重新选择.这种走不通就回退再走的 ...

  7. 回溯法n后问题(具体代码实现,详细分析)

    目录 1.什么是n后问题 2.n后问题解析. 3.代码实现: 1.什么是n后问题: 1.问题描述 在nxn格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或 ...

  8. 【回溯法】八皇后问题

    问题描述 在国际象棋棋盘(8×8)(8\times8)(8×8)上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 皇后可以攻击处于同一行.同一列和同一对角线上的棋子. 思路分析 八皇后问题可以使用 ...

  9. 七十八、 回溯法解决八皇后问题

    @Author:Runsen 八皇后问题 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后. 来自百度百科,皇后的走法是可 ...

最新文章

  1. 机器学习、数据挖掘及其他
  2. C 语言编程 — 程序的编译流程
  3. 程序员如何用Java排序
  4. line-height的一点见识
  5. POJ3585-Accumulation Degree【树形dp,二次扫描与换根法】
  6. js-----Date==字符串
  7. 链接学习之obj文件探索
  8. python函数执行shell_6方法,python中执行shell命令
  9. cdsn 最大分类数相关
  10. Ps如何把背景图片拉长并不变形!
  11. iMeta | 南医大陈连民/孔祥清等综述从基因组功能角度揭示肠菌对复杂疾病的潜在影响...
  12. mybatis like的两种写法
  13. Chromium for mac(谷歌浏览器)V89.0.4336.0官方最新版
  14. x264学习(2)——x264命令行参数解释
  15. Java web软件推荐
  16. 程序员应该怎么接私活?
  17. cisco 3560 QOS配置
  18. MySQL挑战:建立10万连接
  19. linux 开发设计软件,在Linux平台下开发和设计聊天软件
  20. 对话翻译官-实时语音对话翻译

热门文章

  1. 留数定理 含 数学物理方法(吴崇试 第三版)答案详解
  2. PS色阶工具定义【转】
  3. html文件访问遭拒,防止IE中出现“ SCRIPT5:访问被拒绝”错误
  4. python 取整法(进一取值)
  5. 这两个月——我的学习Python学习之路
  6. 关于CV的一些资料总结,附链接
  7. 【渝粤教育】电大中专计算机职业素养 (3)作业 题库
  8. fan_in / fan_out 的理解
  9. 发票扫一扫识别,一键导出表格
  10. icomoon字体图标的使用与引用