代码,由全排列转化而来,加上剪枝,整洁的代码:

共有4个变量,res(最终的结果),level,当前合理的解,n皇后的个数,visit,当前列是否放过皇后,由于本来就是在新的行方皇后,又通过visit判定,因此当前的新皇后肯定不在以往的行和列。因此只需要对新加的皇后判断斜对角是否符合要求;

class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
if(n==) return {};
vector<vector<string>> res;
vector<int> visit(n,);
vector<int> level;
dfs(res,level,visit,n);
return res;
}
void dfs(vector<vector<string>>&res,vector<int>&level,vector<int>&visit,int n){
if(level.size()==n){
vector<string> vs(n,string(n,'.'));
for(int i=;i<n;i++){
int j=level[i];
vs[i][j]='Q';
}
res.push_back(vs);
return;
}
for(int j=;j<n;j++){
if(visit[j]== && isvalid(level,j)){
visit[j]=;
level.push_back(j);
dfs(res,level,visit,n);
visit[j]=;
level.pop_back();
}
}
}
bool isvalid(vector<int>&level,int y){
int x=level.size();
for(int i=;i<x;i++){
int j=level[i];
if(abs(y-j)==x-i)
return false;
}
return true;
}
};

其实就是全排列问题+剪枝,也是很经典很经典

代码:

class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<vector<string>> res;
vector<int> pos(n,-);//记录第i+1行的皇后,应该放在第j+1列
int row=;
DFS(n,row,pos,res);
return res;
}
void DFS(int n,int row,vector<int>& pos,vector<vector<string>>& res){
//回溯法,能到下一条语句一定合法
//递归边界1,得到最终的解;
if(row==n){
vector<string> temp(n,string(n,'.'));
for(int i=;i<n;i++){
temp[i][pos[i]]='Q';
}
res.push_back(temp);
}else{
for(int col=;col<n;col++){
//新加皇后到row+1行,col+1列合法,进入子问题;如果新皇后怎么加都无效,则本次循环结束,col+1进行下一次循环
//判断是否需要向子问题递归,不需要则返回上一层;
if(isvalid(pos,row,col)){
pos[row]=col;
DFS(n,row+,pos,res);
pos[row]=-;
}
}
} }
bool isvalid(vector<int>& pos,int row,int col){
//判断是否放在了已经有皇后的列上,以及是否在同一对角线上;
for(int i=;i<row;i++){
if((col==pos[i])||(abs(row-i)==abs(col-pos[i])))
return false;
}
return true;
}
};

leetcode 51 N皇后问题的更多相关文章

  1. Java实现 LeetCode 51 N皇后

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

  2. leetcode 51. N皇后 及 52.N皇后 II

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

  3. [leetcode]51. N-QueensN皇后

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  4. LeetCode 51. N-QueensN皇后 (C++)(八皇后问题)

    题目: The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two que ...

  5. Leetcode之回溯法专题-51. N皇后(N-Queens)

    Leetcode之回溯法专题-51. N皇后(N-Queens) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给 ...

  6. [LeetCode] 51. N-Queens N皇后问题

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  7. [LeetCode] N-Queens N皇后问题

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  8. LeetCode: 51. N-Queens(Medium)

    1. 原题链接 https://leetcode.com/problems/n-queens/description/ 2. 题目要求 游戏规则:当两个皇后位于同一条线上时(同一列.同一行.同一45度 ...

  9. Java实现 LeetCode 52 N皇后 II

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

随机推荐

  1. el-table + el-form实现可编辑表格字段验证

    表格输入信息很常见,因此表格的验证也很必要,el-form提供了输入框验证.可以和表格结合起来用,使用效果     HTML: <div class="table_box"& ...

  2. 互联网安全架构之常见的Web攻击手段及解决办法

    一.Web 安全常见攻击手段 XSS(跨站脚本攻击) SQL 注入 CSRF(跨站请求伪造) 上传漏洞 DDoS(分布式拒绝服务攻击)等 二.攻击手段原理及解决方案 1.XSS攻击 原理:XSS 攻击 ...

  3. NumPy 简介及安装

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.NumPy 的前身 Numeric 最早是 ...

  4. dedecms 缩略图路径修改

  5. Linux——Session复制中的失败的可能原因之一

    组播地址问题 route add -net 224.0.0.0 netmask 240.0.0.0 dev eno16777728(自己的网卡名)

  6. P1801 黑匣子[对顶堆]

    没错我就是专门找对顶堆练习题的.现在感觉对顶堆使用面有点狭窄.这道题由于我询问是随时间单调增的,而且数据比较友好,应该是插入几次就询问一下的.而中位数那题也是经常询问的.如果查询的东西不单调,或者查询 ...

  7. K8S网络模型

    一.网络模型概述 k8s的网络中主要存在四种类型的通信:同一pod内的容器间通信.各pod彼此之间的通信.pod与service间的通信.以及集群外部的流量同service之间的通信. k8s为pod ...

  8. 解决supervisord启动问题

    作者:StormerX链接:https://www.jianshu.com/p/d8901ce4712b来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. $ superv ...

  9. 阅读之MySQL数据库分表

    移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据等这样的分析,都需要依靠数据统计和分析,当数据量小时,数据库方面的优化显得不太重要,一旦数据量越来越大,系统响应会变慢,TPS直线下降,直至 ...

  10. C#创建泛型类T的实例的三种方法

    原文链接:https://www.cnblogs.com/lxhbky/p/6020612.html 方法一,通过外部方法传入的实例来实例化: //泛型类: public class MySQLHel ...