力扣算法题—051N皇后问题
#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皇后问题的更多相关文章
- 力扣算法题—052N皇后问题2
跟前面的N皇后问题没区别,还更简单 #include "000库函数.h" //使用回溯法 class Solution { public: int totalNQueens(in ...
- 力扣算法题—069x的平方根
实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...
- 力扣算法题—060第K个排列
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" "132&qu ...
- 力扣算法题—050计算pow(x, n)
#include "000库函数.h" //使用折半算法 牛逼算法 class Solution { public: double myPow(double x, int n) { ...
- 力扣算法题—147Insertion_Sort_List
Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...
- 力扣算法题—093复原IP地址
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135", ...
- 力扣算法题—079单词搜索【DFS】
给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被重复使用. ...
- 力扣算法题—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 ...
- 力扣算法题—144Binary Tree Preorder Traversal
Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [1,null,2,3 ...
随机推荐
- 利用aiohttp制作异步爬虫
asyncio可以实现单线程并发IO操作,是Python中常用的异步处理模块.关于asyncio模块的介绍,笔者会在后续的文章中加以介绍,本文将会讲述一个基于asyncio实现的HTTP框架--a ...
- C# Task用法
1.Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便.比如: ◆ ThreadPool不支持线程的取消.完成.失败通知等交互性 ...
- 从零开始学安全(十一)●IP地址
127 都是本机地址 ip DE 类网段 都是广播网段 它并不指向特定的网络 用不上
- 【Java每日一题】20170213
20170210问题解析请点击今日问题下方的“[Java每日一题]20170213”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; public cla ...
- 【Java每日一题】20170117
20170116问题解析请点击今日问题下方的“[Java每日一题]20170117”查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; import jav ...
- JavaScript学习备忘
1.您只能在 HTML 输出流中使用 document.write 如果在文档已加载后使用它(比如在函数中),会覆盖整个文档 2.数组 : [40, 100, 1, 5, 25, 10] <== ...
- angular 时间戳转换(星期过滤器)
{{(value.time+'000' | date:'yyyy-MM-dd HH:mm:ss') : '/'}} .filter('getWeek', function() { return fun ...
- 洛谷P4577 [FJOI2018]领导集团问题(dp 线段树合并)
题意 题目链接 Sol 首先不难想到一个dp,设\(f[i][j]\)表示\(i\)的子树内选择的最小值至少为\(j\)的最大个数 转移的时候维护一个后缀\(mx\)然后直接加 因为后缀max是单调不 ...
- 中文代码示例之NW.js桌面应用开发初体验
先看到了NW.js(应该是前身node-webkit的缩写? 觉得该起个更讲究的名字, 如果是NorthWest之意的话, logo(见下)里的指南针好像也没指着西北啊)和Electron的比较文章: ...
- 【代码笔记】Web-JavaScript-JavaScript 类型转换
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...