当前位置: 首页 > news >正文

免费销售网站模板扬州企业做网站

免费销售网站模板,扬州企业做网站,东莞市疾控中心地址,做物流网站电话按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种…

按照国际象棋的规则,皇后可以攻击与之处在同一行同一列同一斜线上的棋子。

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

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

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

示例 1
answer
输入n = 4
输出[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2

输入n = 1
输出[["Q"]]

提示

1 <= n <= 9

已经不是第一次遇到 N 皇后问题了,依稀记得三年前的暑假,刚接触 c++的自己,看着 N 皇后别人 AC 掉的代码,天书一般,留下的知识满眼的钦佩!

  • 愿与君共勉!

事实上,现在看来,N 皇后问题相比其他的回溯算法题,hard点在于它使用的是二维数组,回溯的思路是不变的!

void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
}
  • 参数选择 -> 回溯终止条件 -> 单层处理logic

值得一提的是 每列棋子放置的合理性判别,即 isValid的函数实现。


AC

/** @lc app=leetcode.cn id=51 lang=cpp** [51] N 皇后*/// @lc code=start
class Solution {
private:vector<vector<string>> result;bool isValid(int row, int col, vector<string>& chessboard, int n) {// 检查列for(int i = 0; i < row; i++) {if(chessboard[i][col] == 'Q')return false;}// 检查45°角for(int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {if(chessboard[i][j] == 'Q')return false;}// 检查135°角for(int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {if(chessboard[i][j] == 'Q')return false;}return true;}void backtracking(int n, int row, vector<string>& chessboard) {if(n == row) {result.push_back(chessboard);return ;}for(int col = 0; col < n; col++) {if(isValid(row, col, chessboard, n)) {chessboard[row][col] = 'Q';backtracking(n, row + 1, chessboard);chessboard[row][col] = '.';}}}
public:vector<vector<string>> solveNQueens(int n) {result.clear();std::vector<std::string> chessboard(n, std::string(n, '.'));backtracking(n, 0, chessboard);return result;}
};
// @lc code=end

AC


【补充】cpp 哈希表
C++中哈希表可以分为以下几类:

  1. unordered_map :基于哈希表实现的 Key-Value 映射容器,支持快速的插入、查找和删除操作。

下面是 unordered_map 常见的使用方式:

#include <unordered_map>
#include <string>
using namespace std;int main() {// 创建一个空的unordered_mapunordered_map<string, int> umap;// 插入元素umap["apple"] = 10;umap.insert(make_pair("orange", 20));// 访问元素int apple_price = umap["apple"];int orange_price = umap.at("orange");// 遍历元素for (auto it = umap.begin(); it != umap.end(); it++) {cout << it->first << " : " << it->second << endl;}// 删除元素umap.erase("apple");umap.clear();return 0;
}
  1. unordered_set :基于哈希表实现的无序集合容器,支持快速的插入、查找和删除操作。和 unordered_map 相似,只是不需要存储键值对。

下面是 unordered_set 常见的使用方式:

#include <unordered_set>
#include <string>
using namespace std;int main() {// 创建一个空的unordered_setunordered_set<string> uset;// 插入元素uset.insert("apple");uset.insert("orange");// 查找元素if (uset.find("apple") != uset.end()) {cout << "Found apple!" << endl;}// 遍历元素for (auto it = uset.begin(); it != uset.end(); it++) {cout << *it << endl;}// 删除元素uset.erase("apple");uset.clear();return 0;
}
  1. unordered_multimap :基于哈希表实现的 Key-Value 映射容器,支持插入重复的 Key,每个 Key 对应多个 Value。和 unordered_map 相似,只是可以插入重复 Key 和多个 Value。

下面是 unordered_multimap 常见的使用方式:

#include <unordered_map>
#include <string>
using namespace std;int main() {// 创建一个空的unordered_multimapunordered_multimap<string, int> umap;// 插入元素umap.insert(make_pair("apple", 10));umap.insert(make_pair("orange", 20));umap.insert(make_pair("apple", 30));// 访问元素auto range = umap.equal_range("apple");for (auto it = range.first; it != range.second; it++) {cout << it->first << " : " << it->second << endl;}// 遍历元素for (auto it = umap.begin(); it != umap.end(); it++) {cout << it->first << " : " << it->second << endl;}// 删除元素umap.erase("apple");umap.clear();return 0;
}
  1. unordered_multiset :基于哈希表实现的无序集合容器,支持插入重复的元素。和 unordered_set 相似,只是可以插入重复元素。

下面是 unordered_multiset 常见的使用方式:

#include <unordered_set>
#include <string>
using namespace std;int main() {// 创建一个空的unordered_multisetunordered_multiset<string> uset;// 插入元素uset.insert("apple");uset.insert("orange");uset.insert("apple");// 查找元素if (uset.count("apple") > 0) {cout << "Found apple!" << endl;}// 遍历元素for (auto it = uset.begin(); it != uset.end(); it++) {cout << *it << endl;}// 删除元素uset.erase("apple");uset.clear();return 0;
}

以上是哈希表的四种常见用法,需要根据具体业务场景选择相应的容器。

http://www.yayakq.cn/news/765233/

相关文章:

  • 石家庄哪个公司做网站好杭州网站建设维护
  • dedecms公司网站怎么做泰安网络营销公司
  • 做电商网站齐河做网站
  • 网站后台管理系统软件十堰秦楚网最新消息
  • 四川宜宾建设局官方网站wordpress搬迁数据库连接失败
  • 国土系统网站建设用地受理表wordpress展示企业主题免费下载
  • 网站目录链接怎么做如何写营销策划方案
  • 建设什么类型网站好wordpress 主机配置
  • 临海建设局官方网站做广告的公司
  • 大连网站模板建站网站备案怎么关闭网站
  • wish网站应该怎么做外链兔
  • 伪静态规则变动对网站的影响网站推广代理
  • 企业网站建设有什么好网站备案的规定
  • 网站建设的介绍wordpress百度小程序
  • 十大招聘网站排行榜什么是工业互联网
  • wordpress博客亚马逊广告廊坊百度关键词优化
  • 宁波建设网站制作工程招标信息在哪看
  • 我想自己做网站可以赚钱做变性手术视频网站
  • .net 做手机网站吗wordpress代言宝插件
  • 广东省建设厅网站首页网站开发亿玛酷1专注
  • 美团网站做疏通广告Wordpress图墙主题
  • 下拉框代码自做生成网站制作游戏网站公司
  • 国外教程 网站网站搭建招标方案
  • 厦网站建设培训学校福建省南平市建设局网站
  • 月牙河做网站公司淘宝导航里的链接网站怎么做
  • 没有专项备案的网站企业网站建设 优化
  • 汽车商城网站模板免费下载济源专业做网站公司
  • 搭建好网站如何使用广州营销网站建设设计
  • 青建设厅官方网站海省郑州模板建站平台
  • 电子商务网站建设的目的意义郑州网站制