HOT62-N皇后

news/2024/11/24 5:35:33/

        leetcode原题链接:N皇后

题目描述

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

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

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 9

解题方法:回溯法。backtrack(n, int x, tmp, q_mp, results)表示对第x行放置皇后(0<= x < n),tmp用于保存临时解, q_mp用于保存[0, x -1]已经放置了皇后的每一个<x0, y0>,针对x,寻找对应的所有可能的y,这些y必须满足条件y\neq y0 \cap |y-y0|\neq |x-x0|,即待放置皇后的(x,y)不与已经放置了皇后的(x0, y0)中的任何一个皇后不能在同一列,也不能在同一个斜率为1或者-1的对角线上。

C++代码

#include <iostream>
#include <vector>
#include <string> 
#include <map>
#include <utility> //pair
class Solution {
public:std::vector<std::vector<std::string>> solveNQueens(int n) {std::vector<string> tmp(n, std::string(n, '.'));//将每一行的tmp都设置为空位(.)std::map<int, int> q_mp; //保存每一行的皇后对应的列。x->ystd::vector<std::vector<string>> results;//保存最终的结果backtrack(n, 0, tmp, q_mp, results);return results;}// 对第i行放置皇后// q_mp 保存当前已经放了Q的(x,y)void backtrack(int n, int x, std::vector<string>& tmp, std::map<int, int>& q_mp, std::vector<std::vector<string>>& results) {if (x == n) { //每一行都放置好了皇后results.emplace_back(tmp);return;}// 对第x行不同的列放置皇后for (int y = 0; y < n; y++) {if (check(x, y, q_mp)) {// 对第x行操作tmp[x][y] = 'Q';q_mp.insert({x, y});backtrack(n, x + 1, tmp, q_mp, results); // 对下一行处理// 对第x行取消操作tmp[x][y] = '.';q_mp.erase(x);}}}// 判断(x, y)与当前已经赋值过的(x0, y0)是否冲突bool check(int x, int y, std::map<int, int>& q_mp) {for (const auto& vp : q_mp) {int x0 = vp.first;int y0 = vp.second;// 不同列if (y0 == y) {return false;}// 不能在对角线(包括主对角线和斜对角线)if (std::abs(y - y0) == x - x0) {return false;}}return true;}
};


http://www.ppmy.cn/news/877791.html

相关文章

小白求助 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者怎么解决呀

为什么我win10新下的dev-c 运行时提示 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息&#xff0c;然后联系软件发布者 在线求助&#xff0c;救救孩子吧

计算机非核心期刊

非版面费多少&#xff1f; 根据一般杂志社版面费计算规则&#xff1a;省级期刊:400元-800元&#xff0c;国家级期刊一般在1500元左右。具体的版面费用还得来本网站核实&#xff0c;不同的撰写费用也会有所偏差所以大家可以咨询本文网站在线客服了解详细情况。 非核心期刊有哪…

win10教育版激活错误:在运行 Microsoft Windows 非核心版本的计算机上,运行slui.exe ...”...

折腾了一天&#xff0c;最终轻松解决&#xff0c;先启用Software Protection服务&#xff0c;在激活&#xff08;密钥或者工具都行&#xff09;。 PS:但是这样还是无法解决Software Protection自动停止的问题&#xff0c;这个可以参考网上的解决方案&#xff08;我是参考这个方…

Error0x803f7001,省时省力彻底解决win10多版本(以win10家庭中文版为例)升级为专业版并且永久激活问题

本人为win10 家庭中文版本,在网上搜寻了一堆升级密钥,后尝试多个密钥成功升级为专业版,但是使用其他博主所说的三行命令行语句方法总是在最后一步遇到错误0x803f7001:在运行 Microsoft Windows 非核心版本的计算机上. 运行疑难解答后提示:已经找到相关数字许可证,但是需要安装w…

非核心版本的计算机上_哪个版本的Microsoft Office最好使用、来占用最少的资源...

使用过多个版本的Microsoft Office和WPS Office。让我推荐几个版本&#xff1a; Microsoft Office 2003和Microsoft Office 2007是两个资源最密集的版本(不考虑旧版本的Office)&#xff0c;除非它们是特别旧的计算机&#xff0c;否则不建议安装。对于十年前的旧计算机&#xff…

Linux内核版本和发行版本

1.1.4 Linux的内核版本和发行版本 1&#xff0e;内核版本 内核是系统的心脏&#xff0c;是运行程序和管理像磁盘和打印机等硬件设备的核心程序&#xff0c;它提供了一个在裸设备与应用程序间的抽象层。例如&#xff0c;程序本身不需要了解用户的主板芯片集或磁盘控制器的细节就…

核心线程,非核心线程的区别你还记得吗?

/ 今日科技快讯 / 近日&#xff0c;腾讯发布了2020年第三季度业绩报告。财报显示&#xff0c;腾讯第三季度营收1254.5亿元&#xff0c;市场预估1238.29亿元&#xff0c;去年同期972.4亿元&#xff0c;同比增长29%。净利润385.4亿元&#xff0c;同比增长89%&#xff0c;市场…

Windows 内核的版本

正如上一节所介绍&#xff0c;Windows 内核经过了20 年的发展&#xff0c;其体系结构并没有大的变化。而Windows 内核中的各个组件在经过了长期发展以后&#xff0c;变得更加优化和成熟。下页表1.1列出了Windows 内核的版本以及相应的操作系统。 表1.1 Windows 内核的版本列表…