1. 题目

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

上图为 8 皇后问题的一种解法。

给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。

每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。

示例:
输入: 4
输出: [[".Q..",  // 解法 1"...Q","Q...","..Q."],["..Q.",  // 解法 2"Q...","...Q",".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。
  • LeetCode 52题,类似要求的是方案数,不用枚举出来。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-queens
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

可参考:回溯算法(Backtracking Algorithm)之八皇后问题

class Solution {vector<vector<string>> ans;int N;
public:vector<vector<string>> solveNQueens(int n) {vector<string> map(n,string(n,'.'));N = n;dfs(map,0);return ans;}void dfs(vector<string>& map, int x){if(x == N){ans.push_back(map);return;}for(int i = 0; i < N; ++i){if(isok(map,x,i)){map[x][i]='Q';dfs(map,x+1);map[x][i]='.';}}}bool isok(vector<string>& map, int i, int j){int delta = 1;while(i-1 >= 0){if(map[i-1][j]=='Q')//竖直方向return false;if(j-delta>=0 && map[i-1][j-delta]=='Q')return false;//左45度if(j+delta<N && map[i-1][j+delta]=='Q')return false;//右45度i--;//向上查找delta++;//45度增量}return true;}
};

class Solution {int sum = 0;
public:int totalNQueens(int n) {vector<string> map(n,string(n,'.'));for(int i = 0; i < n; ++i){map[0][i]='Q';dfs(map,0,i,n);map[0][i]='.';}return sum;}bool isok(vector<string>& map, int x, int y, int &n){int i = 1, j = y;while(x >= 1)//向上遍历,看冲突不{if(map[x-1][j]=='Q')//竖直方向return false;if(j-i>=0 && map[x-1][j-i]=='Q')//左45度return false;if(j+i<n && map[x-1][j+i]=='Q')//右45度return false;i++;//45度张角x--;//往上找}return true;}void dfs(vector<string>& map, int x, int y, int& n){if(x==n-1)sum++;for(int i = 0; i < n; ++i){   //x+1下一行if(x+1 < n && isok(map,x+1,i,n)){map[x+1][i] = 'Q';dfs(map, x+1, i, n);map[x+1][i] = '.';}}}
};

LeetCode 51. N皇后 / 52. N皇后 II(回溯)相关推荐

  1. 51. N皇后/52. N皇后 II

    2020-07-29 1.题目描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 2.题解 回溯算法 3.代码 class Solution {pu ...

  2. LeetCode每日一题 52. N皇后 II

    题目链接 思路 暴搜 二进制 class Solution {public:vector<int> row, col;int totalNQueens(int n) {int ret= 0 ...

  3. 【DFS】LeetCode 51. N-Queens

    LeetCode 51. N-Queens Solution1:我的答案 回溯法 class Solution { public:vector<vector<string>> ...

  4. LeetCode 51. N 皇后、52. N 皇后 II

    51. N 皇后 n皇后问题要求皇后放置后,同一行,同一列,同一斜线上不存在其他的皇后即可 采用回溯法解决该问题 同时应该设置一个函数判断当该位置放置皇后后,是否合法 因为是采用回溯法放置皇后,每行只 ...

  5. LeetCode 52.N皇后II

    [LetMeFly]52.N皇后II 力扣题目链接:https://leetcode.cn/problems/n-queens-ii/ n 皇后问题 研究的是如何将n个皇后放置在n×n的棋盘上,并且使 ...

  6. Java实现 LeetCode 52 N皇后 II

    52. N皇后 II n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方案 ...

  7. LeetCode—52. N皇后 II(困难)

    52. N皇后 II(困难) 题目描述: n 皇后问题研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击.即令其中任意两个皇后都不同列.同行和在一条斜线上. 给你一 ...

  8. 【LeetCode】51和52.N皇后

    N皇后 题目描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解 ...

  9. LeetCode打卡 52八皇后Ⅱ53最大子序和54螺旋矩阵

    原创公众号:bigsai 希望和优秀的你做朋友,感觉不错还请一键三连. 回复进群即可加入和200+人一起打卡.上周打卡: LeetCode 47全排列Ⅱ&48旋转图像 LeetCode 49字 ...

最新文章

  1. 【从零开始的ROS四轴机械臂控制】(七)- ROS与arduino连接
  2. 华为EC169 3G卡在Win7下的安装
  3. scp跨主机拷贝工具
  4. php取出多维数组的所有元素,php - 获取多维数组PHP中两个元素之间的所有数组 - SO中文参考 - www.soinside.com...
  5. stol函数在linux下使用,linux socket编程(一)
  6. Windows UWF 实现系统重启还原(2021.11.02)
  7. SOC厂商--全志瑞芯微
  8. python求15 17 23 65 97的因数_pythonlearning
  9. 10步(**10 step**)天才思维模型
  10. C++的35个技巧阅读笔记(五)
  11. 【Java面试系列】ElasticSearch面试题
  12. css实现超过两行用...表示
  13. kubeadm安装配置指南
  14. 二进制及二进制的转换
  15. 数据分析师八大能力之一:收集信息的能力
  16. php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像) get_avat - phpStudy...
  17. UWP解决 右击点击 没反应问题(阻止点击穿透?)
  18. 中国便利店区域战:下沉、土味、差异化
  19. 【独家】华为OD机试 - 英文输入法(C 语言解题)
  20. 教培机构、讲师的6大痛点

热门文章

  1. python 库整理_自己整理的PYTHON库
  2. Caffe源码解析1:Blob
  3. mysql 文件系统规划_Mysql的文件系统规划以及日志配置
  4. 一些Base64编码/解码及数据压缩/解压方面的知识
  5. 哪些类继承了Collection接口
  6. 从github上克隆hibernate项目
  7. 【原创】从 列表的重复 到 用sum展开二层嵌套列表将子元素合并
  8. ios 逆向编程(环境搭建)
  9. 【原】npm 常用命令详解
  10. 【海淘域名】GoDaddy账户被锁定后的解决方法