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

共有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. python爬去虎扑数据信息,完成可视化

    首先分析虎扑页面数据 如图我们所有需要的数据都在其中![image.png](1)所以我们获取需要的内容直接利用beaitifulsoupui4``` soup.find_all('a',class_ ...

  2. jumpserver开源堡垒机部署安装

    0x01.前言 Jumpserver 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 的专业运维审计系统. Jumpserver 使用 Python / Djang ...

  3. 了解并安装Nginx

    公司使用nginx作为请求分发服务器,发现本人在查看nginx配置上存在些许困难,故仔细阅读了陶辉的<深入理解nginx模块开发与框架>第一部分,并作此记录. 了解 我根据书上的思路来了解 ...

  4. 标准C语言(4)

    分支语句可以在程序执行的时候从几组语句里选择一组,执行而忽略其他组,在编写程序的时候如果遇到多种可能性,每种可能性需要专门的语句处理,这种情况下就可以考虑采用分支结构解决问题 if关键字可以用来编写分 ...

  5. PropertyPlaceholderConfigurer implements BeanFactoryPostProcessor

    BeanFactoryPostProcessor的应用 最常用的一个应用就是org.springframework.beans.factory.config.PropertyPlaceholderCo ...

  6. Linux 性能优化笔记:软中断(转载)

    进程的不可中断状态是系统的一种保护机制,可以保证硬件的交互过程不被意外打断. 所以,短时间的不可中断状态是很正常的. 但是,当进程长时间都处于不可中断状态时,你就得当心了.这时,你可以使用 dstat ...

  7. P1879 [USACO06NOV]玉米田Corn Fields[轮廓线DP]

    状压暴力显然可做.但是数据出的再大一点就要稳T了.理论$O(n4^m)$,只不过实际跑不满. 考虑用轮廓线DP,设$f(i,j,S)$为处理到$(i,j)$时候(这格还不确定)的轮廓线为$S$的情况( ...

  8. window下,nodejs安装http-server,并开启HTTP服务器

    1.下载nodejs  官方下载地址:https://nodejs.org/en/ 2.在cmd命令中,输入node -v 输入出版本号,代表安装成功. 3.输入 npm install http-s ...

  9. React native 在mac下安裝 环境

    前言 春节回来上班第一天,配了mac ,然后在去年就有要弄mac 配置RN教程,好勒一上午,其中有遇到一些问题,都解决 了 当然你可以看官网的步骤啦 https://reactnative.cn/do ...

  10. hiho #1144 : 01串(模拟)

    #1144 : 01串 时间限制:7000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个整数n和m,求是否存在恰好包含n个0和m个1的01串S,使得S中不存在子串"001 ...