一:题目

二:思路

思路:
1.这里在选择建树(也就是在选择解的空间上)是 子集树
2.那么在结点上我们选择的是一个二维的矩阵就是将最后的结果落实到一个二维容器里
也就遍历到叶节点时候一种可行解的情况
3.写码思路:
<1>:递归函数的参数:
backtacking(int row,vector &v,int n)
row:代表矩阵的行数
vector &v:存放的是最后二维矩阵的可行解
n:代表的是棋盘的宽度和长度
<2>:输出结果
这里使用 vector<vector> v;
来处理每次的可行接
<3>:单层循环
这里横向每层的循环是遍历不同的列,横向的是递归二维矩阵不同的行(往下进行)
<4>:递归终止条件
当 row == n 时候,我们就可以将一次可行解装入容器了
4.这里还需补充的是在递归函数里,我们在每次选择皇后的位置的时候要注意题目的要求
不同行,不同列 不在同一条斜线上
不同行:因为我们是逐层往下递归的所以不同行我们就解决了
不同列:这里看代码
不在一条斜线上:(分为45° 和 135°) 这里图解

三:上码

class Solution {public:vector<vector<string> > ans;//判断位置是否合法
bool isLegal(int row,int cal,vector<string> &v,int n){//判断是否在一列上for (int i = 0; i < row; i++) {//这里我们只判断从row往上的行即可if (v[i][cal] == 'Q') return false;}//判断是否在135°斜线上上for (int i = row - 1, j = cal - 1; i >= 0 && j >= 0; i--,j--) {if (v[i][j] == 'Q') return false;}//判断是否在45°斜线上for (int i = row - 1,j = cal + 1; i >= 0 && j <= n; i--,j++){if (v[i][j] == 'Q') return false;}return true; }void backtacking(int row,vector<string> &v,int n) {if (row == n) {ans.push_back(v);return;}for (int cal = 0; cal < n; cal++) {//cal:列if (isLegal(row,cal,v,n)) {v[row][cal] = 'Q';//这是满足条件的backtacking(row+1,v,n);v[row][cal] = '.';//当一次可行结果 结束后,需要v将空间腾出来,给后面的可行解 }}
}vector<vector<string>> solveNQueens(int n) {/**思路:1.这里在选择建树(也就是在选择解的空间上)是 子集树2.那么在结点上我们选择的是一个二维的矩阵就是将最后的结果落实到一个二维容器里也就遍历到叶节点时候一种可行解的情况3.写码思路:1>:递归函数的参数:backtacking(int row,vector<string> &v,int n)row:代表矩阵的行数vector<string> &v:存放的是最后二维矩阵的可行解n:代表的是棋盘的宽度和长度2>:输出结果这里使用 vector<vector<string >> v;来处理每次的可行接3>:单层循环这里横向每层的循环是遍历不同的列,横向的是递归二维矩阵不同的行(往下进行)4>:递归终止条件当 row == n 时候,我们就可以将一次可行解装入容器了4.这里还需补充的是在递归函数里,我们在每次选择皇后的位置的时候要注意题目的要求不同行,不同列 不在同一条斜线上不同行:因为我们是逐层往下递归的所以不同行我们就解决了不同列:这里看代码不在一条斜线上:(分为45° 和 135°) 这里图解     **/vector<string>v (n,string(n,'.'));//这传入的就是默认的二维矩阵..backtacking(0,v,n);return ans;}
};


加油 宝!!!!

51. N 皇后018(回溯法求解)相关推荐

  1. n皇后问题-回溯法求解

    n皇后问题-回溯法求解 1.算法描述 在n×n格的国际象棋上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. n皇后是由八皇后问题演变而来的.该问题 ...

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

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

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

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

  4. 【算法分析】实验 4. 回溯法求解0-1背包等问题

    目录 实验内容 实验目的 实验结果 步骤1:描述与分析 步骤2:策略以及数据结构 步骤3 步骤4 步骤5 步骤6 实验总结 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设 ...

  5. java背包算法回溯法_【算法分析】实验 4. 回溯法求解0-1背包等问题

    [TOC] 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设计.算法描述.算法正确性证明.算法分析.算法实现与测试),通过回溯法的在实际问题求解实践中,加深理解其基本原理和 ...

  6. 拉斯维加斯算法结合回溯法求解n后问题

    实验8 拉斯维加斯算法结合回溯法求解n后问题 设stopVgas为采用拉斯维加斯算法随机排设的皇后个数,对n.stopVgas进行多组不同取值时,记录程序成功率.运行时间 ① 参考课件.教材.其它资料 ...

  7. n皇后问题(回溯法)

    目录 1.问题描述 2.问题分析 3.完整源码 1.问题描述 八皇后问题是十九世纪著名的数学家高斯于1850年提出的.问题是:在8×8的棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同 ...

  8. php生成迷宫图片,PHP实现基于回溯法求解迷宫问题的方法详解

    本文实例讲述了PHP实现基于回溯法求解迷宫问题的方法.分享给大家供大家参考,具体如下: 引言 最近在leetcode上看了些算法题,有些看着很简单的很常用的东西,竟然一下子想不出来怎么求解,比如说:实 ...

  9. 回溯法求解图着色问题

    回溯法求解图着色问题 #include <iostream> #include <cstdlib> using namespace std; #define n 5 #defi ...

  10. 算法设计与分析 实验三 回溯法求解地图填色问题

    回溯法求解地图填色问题 一.实验目的与要求 1.实验基本要求: 2.实验亮点: 二.实验内容与方法 三.实验步骤与过程 1.未优化的回溯: (1)算法描述: (2)编程实现 (3)运行并测试: 2.对 ...

最新文章

  1. linux网络管理三剑客
  2. DiscuzX 论坛首页 和 分 区设置版块横排
  3. IDEA插件-生成对象所有set方法--->GenerateAllSetter
  4. 网摘精灵教程:网摘自动提交工具。
  5. [云炬创业基础笔记] 第四章测试6
  6. clickhouse安装_初识ClickHouse——安装与入门
  7. python wget安装_Macbook系统环境安装wget的2个方法 - 传统包及Homebrew安装
  8. 抱歉!我不太会修电脑 | 2018年中国程序员研究报告
  9. 今天起高考能查分了!这种方式超方便的
  10. JavaScript学习(十二)—removeAttribute方法、hasAttribute方法、createAttribute方法以及setAttributeNode方法
  11. Kernel那些事儿之内存管理(5) --- 衣带渐宽终不悔(上)
  12. 数据缺失,如何智能修复?第一名方案源码分享
  13. 香槟分校计算机研究生专业,2019伊利诺伊大学香槟分校计算机专业申请要求
  14. 澳大利亚麦考瑞大学计算机学院王岩教授招收2022-2023年入学博士研究生和双学位博士生
  15. 基于奇异值分解的图像压缩和信息隐藏
  16. 前端项目分析:我是如何做图片优化的(预加载、懒加载和延迟加载)
  17. 最新瑞芯微四核芯片RK3288开源开发板
  18. 基层管理者必备的能力和素质
  19. python 'utf-8' codec can't decode byte 0xca in position 21: invalid continuation byte
  20. 期末安卓习题--第二章

热门文章

  1. Vue 深度监听和初始绑定
  2. 【ArcGIS Pro微课1000例】0014:两种坐标系全国1km分辨率DEM下载地址(WGS84+Albers投影)
  3. 【ArcGIS Pro微课1000例】0010:ArcGIS Pro导入ArcMap样式符号库——以国土三调样式为例
  4. 【天工Godwork精品教程】任务一:创建工程(导入相片、编辑相机参数、导入POS)
  5. ArcGIS实验教程——实验七:矢量数据空间校正(Spatial Adjustment)
  6. C语言试题四十二之假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。
  7. C++之map的前后遍历
  8. Android插件化开发基础之Java动态代理(proxy)机制的简单例子
  9. Android安全与逆向之Dex动态加载
  10. windows下面怎么github ssh 公钥,然后克隆项目