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

共有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. 转载:Linux目录文件的权限查看与修改

    ########################################                                                             ...

  2. 关于IDEA的application.properties读取乱码,以及显示乱码问题

    设置编码 如果设置之后还是不成功,就重启IDEA 再不行就删除application.properties重新编辑, 我采用的是注释掉要读取的中文部分,再下面再写一行

  3. 关于页面多个ajax请求阻塞的问题

    最近遇到一个问题,我的一个页面有多个ajax请求,但是一个很快的请求却需要很长时间才返回,而且慢于一个耗时比较长的请求,我在考虑是不是有ajax异步并发有问题,但是查询了一些资料,ajax不存在这样的 ...

  4. xss技巧记录

    1.iframe的srcdoc属性 先演示一下 <iframe srcdoc="<script>alert(1)</script>"> 浏览器渲 ...

  5. angularJs select ng-selected默认选中遇到的坑

    本人,程序员妹子一枚,,,,名字中有萌字,简称萌妹子哈,,,首先贴出代码: 同样的方式,用ng-selected用来做回显,但是结果让萌妹我很是诧异,第一个“模板类型”那里的select可正常回显,第 ...

  6. nginx理论基础

  7. 从rc文件访问字符串

    有.rc文件,其中包含用于exe文件详细信息的版本,说明等. 如何获得在代码内使用的值?例如,要获取ProductName. IDI_ICON1 ICON DISCARDABLE "abc- ...

  8. nginx第三天

    nginx架构分析 nginx模块化 nginx基于模块设计,每个模块是一个功能实现,分布式开发,团队协作 核心模块,标准http模块,可选http模块,邮件模块,第三方模块 编译后的源码目录  ob ...

  9. js 设置多条css样式

    如果在一个网页中给id="mydiv"的元素添加css样式,先获取该节点:var obj = document.getElementById("mydiv"); ...

  10. 微信小程序没找到构建npm或者没找到node_modules目录以及如何在小程序中引入vant weapp组件

    微信小程序没找到构建npm或者没找到node_modules目录解决方法如下: 按照微信小程序提供的文档npm install是不行的,直接提示没找到可构建的npm包. 1.直接安装:npm init ...