HOT62-N皇后

        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.hqwc.cn/news/23046.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装SonarQube

1.查看稳定版本的SonarQube&#xff0c;注意7.9之后的版本不在支持Mysql。使用PostgreSQL Download | SonarQube | Sonar 2.拉取PostgreSQL和SonarQube docker pull postgres docker pull sonarqube:9.9-community community代表社区版 3.在下面的目录下创建docker-compose…

2023年iOS App Store上架流程详解(上)

目录 1.注册开发者账号 2.登录并配置人员 3.申请证书和配置文件 一.证书管理​ 二.新建证书​ 三.使用appuploader服务同步证书​ 1&#xff09;申请证书 2&#xff09;添加Identifiers和配置App ID 3&#xff09;申请配置文件 1.在Xcode项目中配置签名 2.上传应用包…

【Redis】Transaction(事务)

&#x1f3af;前言 Redis事务是一个组有多个Redis命令的集合&#xff0c;这些命令可以作为一个原子操作来执行。 Redis事务通常用于以下两种情况&#xff1a; 保证操作的原子性&#xff1a;在多个命令的执行过程中&#xff0c;如果有一个命令执行失败&#xff0c;整个事务都需…

【C++】特殊类设计

目录 一、设计一个不能被拷贝的类 1、C98 2、C11 二、设计一个只能在堆上创建对象的类 三、设计一个只能在栈上创建对象的类 四、设计一个不能被继承的类 1、C98 2、C11 五、设计一个只能创建一个对象的类&#xff08;单例模式&#xff09; 1、饿汉模式 2、懒汉模式 …

C/C++实现高并发http服务器

http高并发服务器实现 基础知识 html&#xff0c;全称为html markup language&#xff0c;超文本标记语言。 http&#xff0c;全称hyper text transfer protocol&#xff0c;超文本传输协议。用于从万维网&#xff08;WWW&#xff1a;World Wide Web&#xff09;服务器传输超…

java-error-No converter found for return value of type

java-error-No converter found for return value of type 问题描述 &#xff1a; 日志如下 &#xff1a; 14-Jul-2023 15:27:46.747 严重 [http-nio-8080-exec-5] org.apache.catalina.core.StandardWrapperValve.invoke 在路径为[]的上下文中&#xff0c;Servlet[action]的…

集群基础2——LVS负载均衡apache(nat模式)

文章目录 一、环境说明一、配置调度器网卡二、配置后端服务器三、配置调度器四、验证五、设置https负载均衡 一、环境说明 使用lvs中的nat模型&#xff0c;对apache负载均衡集群。 主机IP角色安装服务真实IP&#xff1a;192.168.161.129VIP&#xff1a;192.168.161.130调度服务…

阿里云无影云电脑具体价格表(1元入口)

阿里云无影云电脑配置费用&#xff0c;4核8G企业办公型云电脑可以免费使用3个月&#xff0c;无影云电脑地域不同费用不同&#xff0c;无影云电脑是由云桌面配置、云盘、互联网访问带宽、AD Connector、桌面组共用桌面session等费用组成&#xff0c;阿里云百科分享阿里云无影云电…

前端学习——JS进阶 (Day1)

作用域 局部作用域 全局作用域 作用域链 JS垃圾回收机制 闭包 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name&qu…

如何建立统一的自动化测试平台?

前面的文章中我们为大家介绍了中通科技自动化测试当时正在面临的一些困境。第一个是自动化测试框架太多&#xff0c;测试工程师在选择框架和脚本语言的时候很难统一&#xff0c;脚本编写门槛高。第二个是运行脚本的平台不统一&#xff0c;脚本运行时不够稳定。第三个是不同的Je…

使用SiO2和高介电常数介质的SiC功率MOSFET的栅极阻抗分析

Impedance n.阻抗 dielectric n.电解质 propagation n.传播 标题&#xff1a;Gate Impedance Analysis of SiC power MOSFETs with SiO2 and High-κ Dielectric 阅读日期&#xff1a;2023.7.13 研究了什么 这篇论文研究了SiC功率MOSFET的门电阻Zgg特性&#xff0c;包括SiO2…

简易评分系统

目录 一、实验目的 二、操作环境 三、实验内容和过程 1.实验内容 2.代码 2.1 用户验证功能 2.2 菜单函数 2.3 评分功能 四、结果分析 总体的输出结果&#xff1a; 保存文件成功截图&#xff1a; 五、小结 一、实验目的 1.巩固和提高学生学过的基础理论和专业知识&am…