#include "000库函数.h"

 //使用回溯法来计算
//经典解法为回溯递归,一层一层的向下扫描,需要用到一个pos数组,
//其中pos[i]表示第i行皇后的位置,初始化为 - 1,然后从第0开始递归,
//每一行都一次遍历各列,判断如果在该位置放置皇后会不会有冲突,以此类推,
//当到最后一行的皇后放好后,一种解法就生成了,将其存入结果res中,
//然后再还会继续完成搜索所有的情况,代码如下:17ms
class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<vector<string>>res;
vector<int>pos(n, -);
NQueue(res, pos, );
return res;
} void NQueue(vector<vector<string>>&res, vector<int>&pos, int t) {
int n = pos.size();
if (t == n) {//组合成功
vector<string>v(n, string(n, '.'));//这初始化绝逼了
for (int i = ; i < n; ++i)
v[i][pos[i]] = 'Q';
res.push_back(v);
}
else
for (int k = ; k < n; ++k)
if (Danger(pos, t, k)) {
pos[t] = k;
NQueue(res, pos, t + );
pos[t] = -;//切记,关键点,回溯
}
} bool Danger(vector<int>pos, int t, int k) {
for (int i = ; i < t; ++i)
if (pos[i] == k || abs(t - i) == abs(pos[i] - k))
return false;
return true;
} }; //通过使用排列进行判断是否可行进行求解
//但是太耗时了,还是用回溯法吧
class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<vector<string>>res;
vector<int>nums;
for (int i = ; i < n; ++i)
nums.push_back(i); if (Danger(nums)) {
vector<string>v;
for (int i = ; i < n; ++i) {
string s = "";
for (int k = ; k < nums[i]; ++k)
s += '.';
s += 'Q';
for (int k = nums[i] + ; k < n; ++k)
s += '.';
v.push_back(s);
}
res.push_back(v);
}
while (next_permutation(nums.begin(), nums.end())) {
if (Danger(nums)) {
vector<string>v;
for (int i = ; i < n; ++i) {
string s = "";
for (int k = ; k < nums[i]; ++k)
s += '.';
s += 'Q';
for (int k = nums[i] + ; k < n; ++k)
s += '.';
v.push_back(s);
}
res.push_back(v);
}
}
return res;
} bool Danger(vector<int>nums) {//用来判断是否可行
for (int i = ; i < nums.size(); ++i) {
for (int j = ; j < nums.size(); ++j) {
if (j == i)continue;
if ((j + nums[j]) == (i + nums[i]) || (i - nums[i]) == (j - nums[j]))
return false;
}
}
return true;
} }; void T051() {
Solution s;
vector<vector<string>>v;
int n;
n = ;
v = s.solveNQueens(n);
for (auto &a : v) {
for (auto b : a)
cout << b << endl;
cout << "//////////////////////////" << endl;
} }

力扣算法题—051N皇后问题的更多相关文章

  1. 力扣算法题—052N皇后问题2

    跟前面的N皇后问题没区别,还更简单 #include "000库函数.h" //使用回溯法 class Solution { public: int totalNQueens(in ...

  2. 力扣算法题—069x的平方根

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...

  3. 力扣算法题—060第K个排列

    给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" "132&qu ...

  4. 力扣算法题—050计算pow(x, n)

    #include "000库函数.h" //使用折半算法 牛逼算法 class Solution { public: double myPow(double x, int n) { ...

  5. 力扣算法题—147Insertion_Sort_List

    Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...

  6. 力扣算法题—093复原IP地址

    给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135", ...

  7. 力扣算法题—079单词搜索【DFS】

    给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被重复使用. ...

  8. 力扣算法题—143ReorderList

    Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You may not mod ...

  9. 力扣算法题—144Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [1,null,2,3 ...

随机推荐

  1. 【转载】ASP.NET以Post方式抓取远程网页内容类似爬虫功能

    使用HttpWebRequest等Http相关类,可以在应用程序中或者网站中模拟浏览器发送Post请求,在请求带入相应的Post参数值,而后请求回远程网页信息.实现这一功能也很简单,主要是依靠Http ...

  2. 结构型---代理模式(Proxy Pattern)

    代理模式的详细介绍 代理模式按照使用目的可以分为以下几种: 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象.这个不同的地址空间可以是本电脑中,也可以在另一台电脑中.最典型 ...

  3. @Html.xxxxxFor() 规范写法

    @Html.TextBoxFor() 讲解(其他类似的 @Html.LabelFor 等)同理 @Html.TextBoxFor(model => model.SearchParams.Name ...

  4. Laravel5性能优化技巧

    分享一些 Laravel 开发的最佳实践,还有调优技巧,后面陆续整理中 1.配置缓存信息 使用laravel自带的artisan命令,将所有config里面的配置都缓存到一个文件里. php arti ...

  5. JAVA面试题(8)

    java基础以及多个“比较” 1.Collections.sort排序内部原理 在Java 6中Arrays.sort()和Collections.sort()使用的是MergeSort,而在Java ...

  6. MyBatis进阶使用——动态SQL

    MyBatis的强大特性之一就是它的动态SQL.如果你有使用JDBC或者其他类似框架的经验,你一定会体会到根据不同条件拼接SQL语句的痛苦.然而利用动态SQL这一特性可以彻底摆脱这一痛苦 MyBati ...

  7. 详解纯css实现瀑布流(multi-column多列及flex布局)

    瀑布流的布局自我感觉还是很吸引人的,最近又看到实现瀑布流这个做法,在这里记录下,特别的,感觉flex布局实现瀑布流还是有点懵的样子,不过现在就可以明白它的原理了 1.multi-column多列布局实 ...

  8. 包含min函数的栈 ,二叉树的镜像

    包含min函数的栈 问题 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 代码 # -*- coding:utf-8 -*- class Sol ...

  9. Python 利用Python操作excel表格之openyxl介绍Part1

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...

  10. 制作OTA升级包

    OTA 软件包工具 本文地址http://wossoneri.github.io/2018/09/21/%5BAndroid%5D%5BFramework%5Dcreate-ota-update-zi ...