力扣 51. N 皇后

news2024/11/16 16:46:40

题目来源:https://leetcode.cn/problems/n-queens/description/

C++题解1:回溯法。用一个vector<vector<int>> qmap(n, vector<int>(n, 0))标记后面行不能使用的位置,每次递归下一层为下一行的位置,直到达到n行,保存结果。

class Solution {
public:
    vector<vector<string>> res;
    vector<string> lujing;
    void backtracking(int n, vector<vector<int>> qmap, int i) {
        // i为行,j为列
        if(i == n) {
            res.push_back(lujing);
            return;
        }

        for(int j = 0; j < n; j++) {
            if(qmap[i][j] == 0) {

                string a = "";  // 生成行string
                for(int b = 0; b < n; b++) {
                    if(b == j) a = a + 'Q';
                    else a = a + '.';
                }
                lujing.push_back(a);

                vector<vector<int>> temqmap = qmap; // 保存当前qmap,用于回溯
                // 更新qmap斜下方
                int pp = j - 1;
                int qq = j + 1;
                for(int mm = i+1; mm < n; mm++){
                    if(pp >= 0) {qmap[mm][pp] = 1; pp--;}
                    if(qq < n) {qmap[mm][qq] = 1; qq++;}
                }
                // 更新qmap正下方
                for(int mm = i; mm < n; mm++) qmap[mm][j] = 1;

                backtracking(n, qmap, i+1); //更新下一行
                qmap = temqmap;
                lujing.pop_back();
            }
        }
        return;
    }
    vector<vector<string>> solveNQueens(int n) {
        vector<vector<int>> qmap(n, vector<int>(n, 0));
        backtracking(n, qmap, 0);
        return res;
    }
};

太开心了!这是我自己第一次独立做出的“困难”题目! 

C++题解2(来源代码随想录):思路同上,在一些细节上处理不太一样。

class Solution {
private:
vector<vector<string>> result;
// n 为输入的棋盘大小
// row 是当前递归到棋盘的第几行了
void backtracking(int n, int row, vector<string>& chessboard) {
    if (row == n) {
        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] = '.'; // 回溯,撤销皇后
        }
    }
}
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;
}
public:
    vector<vector<string>> solveNQueens(int n) {
        result.clear();
        std::vector<std::string> chessboard(n, std::string(n, '.'));
        backtracking(n, 0, chessboard);
        return result;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/728744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

html案例2

效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initia…

【mysql实践】如何查看阿里云RDS的MySQL库中的binlog日志

背景&#xff1a; 工作中我们为了查看MySQL中数据修改的历史记录时&#xff0c;会通过查看binlog日志。但由于binlog日志是二进制文件&#xff0c;需要解析之后&#xff0c;才能用文本查看工具打开。这次笔者使用flink进行实时统计时就多次遇到了这个问题。经常看笔者最近博客…

redis的分布式事务-redisson

一 redisson 1.1 redisson分布式事务 Redisson分布式锁是一种基于redis实现的分布式锁&#xff0c;它利用redis的setnx命令实现分布式锁的互斥访问。同时还支持锁的自动续期功能&#xff0c;可以避免因为某个进程崩溃或者网络故障导致锁无法释放的情况。 只要线程一加锁成功…

常见面试题之类加载器

1. 什么是类加载器&#xff0c;类加载器有哪些&#xff1f; 要想理解类加载器的话&#xff0c;务必要先清楚对于一个Java文件&#xff0c;它从编译到执行的整个过程。 类加载器&#xff1a;用于装载字节码文件(.class文件)运行时数据区&#xff1a;用于分配存储空间执行引擎&a…

八 、HTML表单

1、表单 三层架构 数据访问层 响应业务逻辑层的请求 与物理数据库交互 业务逻辑层 响应表示层的请求 与数据访问层交互 完成特定的业务逻辑约束 表示层 显示信息 收集信息&#xff08;与业务逻辑层交互&#xff09; HTML显示信息 基本标签&#xff1a;行内元素、块级元素 HT…

Java 设计模式——策略模式

目录 1.概述2.结构3.案例实现4.优缺点5.使用场景6.JDK 源码解析——Comparator 1.概述 &#xff08;1&#xff09;先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 &#xff08;2&#xff09;策略…

【计算机网络】网络编程套接字(二)

文章目录 网络编程套接字&#xff08;二&#xff09;简单TCP服务器实现创建套接字服务器绑定服务器监听服务器接收连接服务器处理请求 简单TCP客户端实现创建套接字客户端发起连接客户端发起请求 服务器简单测试服务器简单测评多进程版TCP服务器捕捉SIGCHLD信号孙子进程提供服务…

如何使用ai绘画生成器创造出惊人的作品

你们了解如何文字生图片吗&#xff0c;简单的来说就是用文字描述出图片的样子&#xff0c;然后通过ai技术生成出来。 这种技术现在应用的很广泛&#xff0c;在各行各业都有在使用&#xff0c;平常我无聊的时候&#xff0c;就靠它为我打磨时间了。 不过现在的ai绘画工具有很多…

51 # 二叉搜索树的实现

实现二叉搜索树 比如我们有数组&#xff1a; [10, 8, 19, 6, 15, 22, 20]需要把数组转为二叉搜索树&#xff0c;效果如下&#xff1a; // 节点 class Node {constructor(element, parent) {this.element element; // 存的数据this.parent parent; // 父节点this.left null…

订座排队小程序/H5/app【附源码】

订座排队小程序/H5/app 可看 应用效果 首页 答题活动规则 选择门店暂无门店 订座订座 订座成功 用户反馈订座 关于后端

抖音seo源码/源码开发部署环境配置及流程分享

抖音seo源码开发部署环境配置&#xff1a; 要配置抖音seo源码开发环境&#xff0c;您需要完成以下步骤&#xff1a; 安装 Python&#xff1a;请在官网下载 Python 并进行安装。 安装 Django&#xff1a;请在命令行中输入以下命令来安装 Django&#xff1a; pip install django…

双周连载 | 暗网分析报告Part 1:他们无法保护你

双周连载 | 暗网分析报告Part 1&#xff1a;他们无法保护你 暗网&#xff0c;一个人们讳莫如深的世界&#xff0c;一个充斥着悄无声息的威胁&#xff0c;似乎永久地悬在我们每个人的头顶。这是一个罪恶的不法之地&#xff0c;时刻散播着未知的可怕力量&#xff0c;这便是那些隐…

使用 Elastic 修剪传入日志体量

作者&#xff1a;Carly Richmond 记录日志还是不记录日志&#xff1f; 一直是软件工程师仍在努力解决的一个难题&#xff0c;这对站点可靠性工程&#xff08;SRE&#xff09;同事来说是不利的。 开发人员并不总能正确了解他们在应用程序中捕获的警告和错误的级别或上下文&#…

01-webpack的理解,解决了什么问题

一、背景 Webpack 最初的目标是实现前端项目的模块化&#xff0c;旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候&#xff0c;我们会通过文件划分的形式实现模块化&#xff0c;也就是将每个功能及其相关状态数据各自单独放到不同的JS 文件中 约定每个文件是一…

dubbo监控中心dubbo-admin老版本(dubbo-ops)使用

1、dubbo分组 在dubbo中&#xff0c;可以指定group&#xff0c;如下&#xff1a; <dubbo:registry protocol"zookeeper" address"${dubbo.registry.address}" client"curator" group"${dubbo.registry.group}" /> 使用proper…

差值结构的排斥能

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由5张二值化的图片组成&#xff0c;让差值结构中有7个1, 行分布是0&#xff0c;1&#xff0c;2&#xff0c;2&#xff0c;2列分布是1&#xff0c;2&#xff0c;4.统计迭代次数并排序。 得…

今年面试真的很难...

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;今年面试实在是太卷了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约…

应用层:文件传输协议FTP

1.应用层&#xff1a;文件传输协议FTP 笔记来源&#xff1a; 湖科大教书匠&#xff1a;应用层概述 湖科大教书匠&#xff1a;文件传输协议FTP 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 将某台计算机中的文件通过网络传送到可能相距很远的另一…

猿人学web刷题1

1.第一题 js混淆源码乱码 - 猿人学 : url 时间戳加密 右键遇到反调试&#xff0c;参考前面的文章 过反调试 2.ast解混淆 首页1.js 拿到 function oo0O0, 在<script>标签里面, 无法调试&#xff0c;分析自己提取出来&#xff0c;或则hook替换 加密逻辑存在于window.a中&a…

Linux分布式应用 Zabbix监控软件实例:监控NGINX的性能

实例&#xff1a;监控NGINX的性能 1.安装&#xff08;确认是否有状态统计模块&#xff09; yum -y install nginx 2.更改NGINX配置文件添加状态统计站点 vim /etc/nginx/nginx.conf #主配置文件 vim /etc/nginx/conf.d/default.conf #子配置文件location /nginx_status {stub_…