51. N皇后

问题描述

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

上图为 8 皇后问题的一种解法。

给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。

每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

示例:

输入: 4
输出: [
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."], ["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。

问题分析

当在棋盘上放置了一个皇后后,立即排除当前行,列和对应的两个对角线。即:

代码

class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<string> path(n,string(n,'.'));
vector<vector<string>> ans;
backtrack(n,0,ans,path);
return ans;
}
void backtrack(int n,int row,vector<vector<string>> &ans,vector<string> &path)
{
if(row == n)
{
ans.push_back(path);
return;
}
for(int i = 0; i < n; ++i)
{
if(checkvaild(n,row,i,ans,path))
{
path[row][i] = 'Q';
backtrack(n,row+1,ans,path);
path[row][i] = '.';
}
}
}
bool checkvaild(int n,int row,int col,vector<vector<string>> &ans,vector<string> &path)
{
int i,j;
for(i = 0; i < row; i++)
{
if(path[i][col] == 'Q')return false;
}
for(i = row - 1,j = col - 1;i>=0&&j>=0;--i,--j)
{
if(path[i][j] == 'Q')return false;
}
for(i = row - 1,j = col + 1;i>=0&&j<n;--i,++j)
{
if(path[i][j] == 'Q')return false;
}
return true;
}
};

结果:

执行用时 :12 ms, 在所有 C++ 提交中击败了62.59%的用户
内存消耗 :9.5 MB, 在所有 C++ 提交中击败了100.00%的用户

52.N皇后 II

问题描述

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

上图为 8 皇后问题的一种解法。

给定一个整数 n,返回 n 皇后不同的解决方案的数量。

示例:

输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
 [".Q..",  // 解法 1
  "...Q",
  "Q...",
  "..Q."],  ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
]

代码

class Solution {
public:
int totalNQueens(int n) {
vector<string> path(n,string(n,'.'));
int num = 0;
backtrack(n,0,path,num);
return num;
}
void backtrack(int n,int row,vector<string> &path,int& num)
{
if(row == n)
{
++num;
return;
}
for(int i = 0; i < n; ++i)
{
if(checkvaild(n,row,i,path))
{
path[row][i] = 'Q';
backtrack(n,row+1,path,num);
path[row][i] = '.';
}
}
}
bool checkvaild(int n,int row,int col,vector<string> &path)
{
int i,j;
for(i = 0; i < row; i++)
{
if(path[i][col] == 'Q')return false;
}
for(i = row - 1,j = col - 1;i>=0&&j>=0;--i,--j)
{
if(path[i][j] == 'Q')return false;
}
for(i = row - 1,j = col + 1;i>=0&&j<n;--i,++j)
{
if(path[i][j] == 'Q')return false;
}
return true;
}
};

结果:

执行用时 :4 ms, 在所有 C++ 提交中击败了89.95%的用户
内存消耗 :8.5 MB, 在所有 C++ 提交中击败了30.71%的用户

参考链接

leetcode 51. N皇后 及 52.N皇后 II的更多相关文章

  1. Leetcode之回溯法专题-52. N皇后 II(N-Queens II)

    Leetcode之回溯法专题-52. N皇后 II(N-Queens II) 与51题的代码80%一样,只不过52要求解的数量,51求具体解,点击进入51 class Solution { int a ...

  2. Java实现 LeetCode 52 N皇后 II

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

  3. LeetCode(52) N-Queens II

    题目 Follow up for N-Queens problem. Now, instead outputting board configurations, return the total nu ...

  4. n皇后问题与2n皇后问题

    n皇后问题 问题描述: 如何能够在 n×n 的棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后 (任两个皇后都不能处于同一条横行.纵行或斜线上) 结题思路: 可采用深度优先算法,将棋盘看成 ...

  5. 蓝桥杯试题 基础练习 2n皇后问题以及n皇后问题

    在学习2n皇后之前,我们应该认识一下n皇后问题: 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对于 ...

  6. dfs-1756:八皇后及1700:八皇后问题

    总时间限制: 1000ms 内存限制: 65536kB 描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被 ...

  7. Leetcode 137. 只出现一次的数字 II - 题解

    Leetcode 137. 只出现一次的数字 II - 题解 137. Single Number II 在线提交: https://leetcode.com/problems/single-numb ...

  8. [Leetcode 90]求含有重复数的子集 Subset II

    [题目] Given a collection of integers that might contain duplicates, nums, return all possible subsets ...

  9. Leetcode之二分法专题-167. 两数之和 II - 输入有序数组(Two Sum II - Input array is sorted)

    Leetcode之二分法专题-167. 两数之和 II - 输入有序数组(Two Sum II - Input array is sorted) 给定一个已按照升序排列 的有序数组,找到两个数使得它们 ...

随机推荐

  1. 由一次 UPDATE 过慢 SQL 优化而总结出的经验

    最近,线上的 ETL 数据归档 SQL 发生了点问题,有一个 UPDATE SQL 跑了两天还没跑出来: update t_order_record set archive_id = '420a7fe ...

  2. IPV4和IPV6 特殊地址块

    https://en.wikipedia.org/wiki/Reserved_IP_addresses https://blog.csdn.net/tty521/article/details/725 ...

  3. Stun协议实现

    在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信(即所谓的P2P通信),而不需 ...

  4. Windows系统安装Redis服务

    下载压缩包,登录 https://github.com/MicrosoftArchive/redis/releases  下载Redis-x64-3.0.504.zip 我也上传了一份  https: ...

  5. 【LeetCode】372. Super Pow 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/super-po ...

  6. 【LeetCode】86. Partition List 解题报告(Python)

    [LeetCode]86. Partition List 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http:// ...

  7. vue create 初步解析以及定制化修改

    版本说明 $ vue --version @vue/cli 4.5.9 $ node --version v14.0.0 $ npm --version 7.6.1 源码位置-mac /usr/loc ...

  8. Atcoder ABC137D:Summer Vacation(贪心)

    D - Summer Vacation Time Limit: 2 sec / Memory Limit: 1024 MB Score : 400 points Problem Statement T ...

  9. vmware虚拟IOS系统

    安装虚拟机     --以管理员的身份运行

  10. 代码质量管理sonarqube部署使用

    一.sonarqube的部署 1.下载sonaqube:https://www.sonarqube.org/downloads/ 根据需要下载特定版本: 2.如果通过sonar-scanner进行代码 ...