问题: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. Xcode5下使用纯代码构建简单的HelloWorld程序
  3. 终端复用命令行神器:tmux
  4. 基于FPGA的FFT变换实现
  5. MySQL—事务隔离级别
  6. xamarin拖一个gridview控件报错怎么解决_[笔记阁]Xamarin初探:版式面板(一)
  7. 大工20春《计算机文化基础》在线测试3,大工20春《计算机文化基础》在线测试3题目【标准答案】...
  8. C陷阱与缺陷代码分析之第2章语法陷阱
  9. 设计模式之Observer(观察者)模式
  10. 28. PHP 文件上传
  11. 计算机网络安全技术期末试题,归纳计算机网络安全技术期末复习试题 doc
  12. JSP概述与运行原理
  13. 汉字Unicode 编码大全
  14. 自动采集收录导航源码
  15. CJW精选题库(from 各种OJ)
  16. 元宵节代码,元宵节快乐代码,元宵节祝福代码
  17. Domino蓝色多瑙河版本
  18. netty源码分析7-NioEventLoop-run方法疑难点
  19. 最小二乘法线性拟合和2次曲线拟合算法
  20. 深度学习之SSD总结

热门文章

  1. 沈阳市民有望年底前拿到“一卡通”社保卡
  2. 百条网络工程师基础面试题(不断更新)
  3. 知识付费领域市场格局与投资观察
  4. 操作系统——页面淘汰算法
  5. 三极管做开关,常用到的电容作用
  6. web前端开发面试题(一)
  7. 【渝粤教育】电大中专计算机职业素养_1作业 题库
  8. 特别提醒:人脸识别时,一定要穿衣服,一不小心就中招了
  9. Photoshop cc 2018基础
  10. 连亏三年!贝壳找房在纽交所上市,市值233亿美元