力扣算法题—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 ...
随机推荐
- OJ:一道考察多态的题目
Description 下面程序的输出结果是: A::Fun C::Do 程序代码 #include <iostream> using namespace std; class A { p ...
- java 开发 websocket 网页端聊天室
博客地址:https://ainyi.com/67 WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端. ...
- [转]php 图片验证码生成 前后台验证
本文转自:https://www.cnblogs.com/xiaoyezi/p/3541195.html 自己从前一段时间做了个php小项目,关于生成图片验证码生成和后台的验证,把自己用到的东西总结一 ...
- JQuery官方学习资料(译):JQuery对象
每当创建一个新的元素(或者选择一个已经存在的元素)时,JQuery将返回一个元素的集合.大部分的开发人员新接触JQuery的时候,都把这个集合当做数组.这个集合中的DOM元素有从零开始的索引, ...
- Android Studio 管理所有程序退出
import android.app.Activity; import java.util.ArrayList; import java.util.List; public class fa { pu ...
- Centos 7.6搭建LNMP环境的web服务器
一.安装软件 1.1.MYSQL安装 下载mysql的repo源: wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rp ...
- Java实现Base64加密
阅读本文约“2.5分钟” Java加解密系列,介绍Java加密解密的基础知识,并使用Base64算法实现加解密. 对于加密在企业中是非常常见的,就如邮件的传输,每个企业都会有自己设置安全方式,设置加密 ...
- Golang 正则表达式Regex相关资料整理
Golang 支持的正在表达式是 https://github.com/google/re2/wiki/Syntax 注意这里提示 NOT SUPPORTED的。 工具 一些测试正则表达式的工具 推荐 ...
- Netty 系列五(单元测试).
一.概述和原理 Netty 的单元测试,主要是对业务逻辑的 ChannelHandler 做测试(毕竟对 Bootstrap.EventLoop 这些做测试着实没有多大意义),模拟一次入站数据或者出站 ...
- 百度前端学院-基础学院-第20到21天之setTimeOut与setInterval
setTimeout()可以使用clearTimeout()关闭 setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭. 注意:setInterv ...