代码随想录算法训练营第三十天 | 51.N 皇后

news/2025/1/23 2:03:04/文章来源:https://www.cnblogs.com/cscpp/p/18237538

51.N 皇后

题目链接 文章讲解 视频讲解

递归三部曲

  • 递归函数参数
    需要传入当前chessBoard和棋盘大小n,以及当前要放置皇后的行数row
    void backtracking(vector<string>& chessBoard, int n, int row);
    
  • 递归终止条件
    当最后一个皇后放置好后结束
    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] = '.'; // 回溯,撤销皇后}
    }
    

整体代码如下:

class Solution {
private:vector<vector<string>> result;
public:vector<vector<string>> solveNQueens(int n) {vector<string> chessBoard(n, string(n, '.'));backtracking(chessBoard, n, 0);return result;}void backtracking(vector<string>& chessBoard, int n, int row) {// 终止条件,回收结果if(row == n) {result.push_back(chessBoard);return ;}for(int i = 0; i < n; ++i) {if(isValid(chessBoard, n, row, i)) {chessBoard[row][i] = 'Q';backtracking(chessBoard, n, row + 1);chessBoard[row][i] = '.';}}}bool isValid(vector<string>& chessBoard, int n, int row, int col) {// 检查列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;}
};

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

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

相关文章

使用Verdaccio创建一个本地私有库,并应用

安装verdaccio npm install -g verdaccio 直接verdaccio启动 可以先右上角登录然后先使用 npm create vite@latest 然后创建属于自己的一个vue3项目 vite-project(随便起了个名) npm i 一下 npm run dev 跑起来看看 然后创建下列文件夹style/indsx/scss .u-t…

【医疗器械产品分类规则了解】

分类目录由国家食品药品监督管理部门依据医疗器械分类规则制定: 医疗器械按照风险程度由低到高,管理类别依次分为第一类、第二类和第三类。医疗器械风险程度,应当根据医疗器械的预期目的,通过结构特征、使用形式、使用状态、是否接触人体等因素综合判定。 第一类医疗器械是…

VS下QT使用QCustomplot报错QPainter::HighQualityAntialiasing: Use Antialiasing instead

@Time:2024-06-07 @Error:VS+QT+QCustomplot 编译时报错 ERROR 4995 QPainter::HighQualityAntialiasing: Use Antialiasing instead @原因:使用标记有 deprecated 的函数。参见:/sdl(启用附加安全检查) | Microsoft Learn @解决办法:关闭编译报错或编译警告;参见:编…

[Qt开发]当我们在开发兼容高分辨率和高缩放比、高DPI屏幕的软件时,我们在谈论什么。

前言 最近在开发有关高分辨率屏幕的软件,还是做了不少尝试的,当然我们也去网上查了不少资料,但是网上的资料也很零碎,说不明白,这样的话我就做个简单的总结,希望看到这的你可以一次解决你有关不同分辨率下的所有问题。 分辨率?DPI? 首先我们搞清楚我们现在到底面对的是…

Maui+blazor中使用https时信任所有证书

Maui中的Android使用https时信任所有证书 前言 最近使用Maui+blazor写了一个Android app,需要调用webapi接口,同时需要用websock与服务器通信,在使用http和https中遇到一些问题 http Android默认禁止http,想要使用http需要在Platforms\Android目录下找到AndroidManifest.xml…

文件格式转换器哪个工具更好用?

文件格式转换器哪个好用?相信很多小伙伴在处理PDF文件时会遇到各种各样的问题,不晓得的选择哪款文件格式转换器!这个时候我们该如何解决呢?以下是文件格式转换器推荐,一起来看看吧。 一、Adobe Acrobat 推荐指数★★★☆☆ Adobe Acrobat是一款非常成熟的在线PDF转换软件,…

yarn或者npm安装依赖报错401 Unauthorized

1. 报错2.原因 在npm顶层的npmrc中指定了某仓库地址,触发了需要验证(可以通过直接打开401的地址看浏览器是否能直接下载)

pr的工作原理

Premiere Pro了解pr面板菜单栏:里面包括文件,编辑,剪辑,序列,标记,窗口,帮助等,在这些菜单里还有子菜单。效果面板:双击素材,可以在效果面板里进行编辑你想要的效果。节目面板:在时间轴里编辑时,要是查看效果在节目面板里进行查看。项目面板:导入和新建的素材都可…

ARM技术 —— 条件执行

文档: DDI0487J_a_a-profile_architecture_reference_manual.pdf本文来自博客园,作者:摩斯电码,未经同意,禁止转载

pr工作原理文档

Adobe Premiere Pro的工作原理思维导图 Pr面板展示图 第一步:导入视频1导入点击文件——点击导入——选择视频,双击视频或点击打开按钮——完成导入。2预览点击视频,拖到右侧;拖动蓝色条,时间指针,点击会快速预览,快捷键是空格键。3视频轨道和音频轨道A声音;V:视频;左…

vue3+TypeScript

1. Vue3简介2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n经历了:4800+次提交、40+个RFC、600+次PR、300+贡献者官方发版地址:Release v3.0.0 One Piece vuejs/core截止2023年10月,最新的公开版本为:3.3.41.1. 【性能的提升】打包大小减少41%。初次渲染快55%, …

pr工作原理

Pr图像式基础课一新建项目二新建序列下一页看后续三颜色调出Lumetri颜色,色轮部分就可以进行颜色的调整(个人)四认识三面板与效果效果控件是pr软件的重要组成部分,它可以对视频效果的调节时间轴上可以进行调节与裁剪无用的视频段画面的展示和查看搜索查找效果五工具的认识选…