leetcode 51 N皇后问题
代码,由全排列转化而来,加上剪枝,整洁的代码:
共有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皇后问题的更多相关文章
- Java实现 LeetCode 51 N皇后
51. N皇后 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决 ...
- leetcode 51. N皇后 及 52.N皇后 II
51. N皇后 问题描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后 ...
- [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 ...
- 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 ...
- Leetcode之回溯法专题-51. N皇后(N-Queens)
Leetcode之回溯法专题-51. N皇后(N-Queens) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给 ...
- [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 ...
- [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 ...
- LeetCode: 51. N-Queens(Medium)
1. 原题链接 https://leetcode.com/problems/n-queens/description/ 2. 题目要求 游戏规则:当两个皇后位于同一条线上时(同一列.同一行.同一45度 ...
- Java实现 LeetCode 52 N皇后 II
52. N皇后 II n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方案 ...
随机推荐
- Java-日期格式转换
1.日期-String类型转Date类型 // String转Date str = "2007-1-18"; DateFormat format1 = new SimpleDate ...
- Linux6上安装MySQL
MySQL安装包下载:https://www.mysql.com/downloads/ 然后选择: 把下载好的安装包传到服务器上的指定目录,然后解压: [root@master mysql]# tar ...
- jq无限极树结构
//群组树结构$(function () { var params= { "companyId":cmpId }; var loadUrl="/apiv2/classif ...
- MySQL5.5配置文件my.ini详解
[client]port = 3306 [mysqld]port = 3306 ##安装目录 basedir="C:/Program Files (x86)/MySQL/MySQL Serv ...
- web攻击日志分析之新手指南
0x00 前言 现实中可能会经常出现web日志当中出现一些被攻击的迹象,比如针对你的一个站点的URL进行SQL注入测试等等,这时候需要你从日志当中分析到底是个什么情况,如果非常严重的话,可能需要调查取 ...
- WEB 服务应用 Nginx之安装篇
一.Nginx 源码包安装与配置 1.环境准备 操作系统.内核版本: CentOS 6.8 2.6.32-642.el6.x86_64 Nginx 软件版本: nginx-1.10.2 2.创建Ng ...
- 华为服务器XH628配置软RAID
1. 硬RAID 1.1. 配置准备 本机型号为华为XH628,配有两块400GSSD,12块1.2TSAS盘.其中2块SSD做RAID1为系统盘,12块SAS盘做RAID5, ...
- SQLServer中跨服务器跨数据库之间的数据操作
首先必须理解一个概念: select * from sys.servers (查看系统表,看原来的服务器名) 要想跨域就必须在以上信息中可以检索到! 怎样添加? --创建链接服务器 ...
- Python核心技术与实战——二十|assert的合理利用
我们平时在看代码的时候,或多或少会看到过assert的存在,并且在有些code review也可以通过增加assert来使代码更加健壮.但是即便如此,assert还是很容易被人忽略,可是这个很不起眼的 ...
- 微信小程序添加底部导航栏
修改 app.json 文件即可 "tabBar": { "selectedColor": "#1296db", "list&qu ...