LeetCode 51. N皇后 / 52. N皇后 II(回溯)
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(回溯)相关推荐
- 51. N皇后/52. N皇后 II
2020-07-29 1.题目描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 2.题解 回溯算法 3.代码 class Solution {pu ...
- LeetCode每日一题 52. N皇后 II
题目链接 思路 暴搜 二进制 class Solution {public:vector<int> row, col;int totalNQueens(int n) {int ret= 0 ...
- 【DFS】LeetCode 51. N-Queens
LeetCode 51. N-Queens Solution1:我的答案 回溯法 class Solution { public:vector<vector<string>> ...
- LeetCode 51. N 皇后、52. N 皇后 II
51. N 皇后 n皇后问题要求皇后放置后,同一行,同一列,同一斜线上不存在其他的皇后即可 采用回溯法解决该问题 同时应该设置一个函数判断当该位置放置皇后后,是否合法 因为是采用回溯法放置皇后,每行只 ...
- LeetCode 52.N皇后II
[LetMeFly]52.N皇后II 力扣题目链接:https://leetcode.cn/problems/n-queens-ii/ n 皇后问题 研究的是如何将n个皇后放置在n×n的棋盘上,并且使 ...
- Java实现 LeetCode 52 N皇后 II
52. N皇后 II n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方案 ...
- LeetCode—52. N皇后 II(困难)
52. N皇后 II(困难) 题目描述: n 皇后问题研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击.即令其中任意两个皇后都不同列.同行和在一条斜线上. 给你一 ...
- 【LeetCode】51和52.N皇后
N皇后 题目描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解 ...
- LeetCode打卡 52八皇后Ⅱ53最大子序和54螺旋矩阵
原创公众号:bigsai 希望和优秀的你做朋友,感觉不错还请一键三连. 回复进群即可加入和200+人一起打卡.上周打卡: LeetCode 47全排列Ⅱ&48旋转图像 LeetCode 49字 ...
最新文章
- 【从零开始的ROS四轴机械臂控制】(七)- ROS与arduino连接
- 华为EC169 3G卡在Win7下的安装
- scp跨主机拷贝工具
- php取出多维数组的所有元素,php - 获取多维数组PHP中两个元素之间的所有数组 - SO中文参考 - www.soinside.com...
- stol函数在linux下使用,linux socket编程(一)
- Windows UWF 实现系统重启还原(2021.11.02)
- SOC厂商--全志瑞芯微
- python求15 17 23 65 97的因数_pythonlearning
- 10步(**10 step**)天才思维模型
- C++的35个技巧阅读笔记(五)
- 【Java面试系列】ElasticSearch面试题
- css实现超过两行用...表示
- kubeadm安装配置指南
- 二进制及二进制的转换
- 数据分析师八大能力之一:收集信息的能力
- php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像)
get_avat - phpStudy...
- UWP解决 右击点击 没反应问题(阻止点击穿透?)
- 中国便利店区域战:下沉、土味、差异化
- 【独家】华为OD机试 - 英文输入法(C 语言解题)
- 教培机构、讲师的6大痛点