力扣51. N 皇后(回溯)

Problem: 51. N 皇后

文章目录

  • 题目描述
  • 思路
  • 解决方法
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

1.决策路径:board中小于row的那些行都已经成功放置了皇后;
2.选择列表:第row行的所有列都是放置皇后的选择(则根据N皇后相互攻击的股则编写判断当前决策是否合法的函数isValid
3.结束条件:row超过board的最后一行

解决方法

1.用一个二维数组vector<vector> res;用于存储最终的所有合法结果;
2.编写回溯函数
backtrack
;具体实现:

2.1.触发结束条件时将当前选择列表添加到结果集合;
2.2.排除不合法选择(编写并调用isValid函数)
2.3.做选择(board[row][col] = ‘Q’)
2.4.进行下一行的决策(backtrack(board, row + 1)😉
2.5.撤销决策(board[row][col] = ‘.’;)

3.编写isValid函数:由于每次决策只用考虑到当前行和之前已经决策完的行所以在检查合法性时只用检查当前列、当前位置的右上方、当前位置的左上方

复杂度

时间复杂度:

O ( N ! ) O(N!) O(N);其中 N N N为棋盘的大小

空间复杂度:

O ( N 2 ) O(N^2) O(N2)

Code

class Solution {
public://Result setvector<vector<string>> res;/*** N queen problem (Backtracking)** @param n Given number* @return vector<vector<string>>*/vector<vector<string>> solveNQueens(int n) {vector<string> board(n, string(n, '.'));backtrack(board, 0);return res;}/*** Backtracking logic implementation** @param board Board* @param row The row of board*/void backtrack(vector<string>& board, int row) {//End conditionif (row == board.size()) {res.push_back(board);return;}int n = board[row].size();for (int col = 0; col < n; col++) {// Exclude illegitimate selectionif (!isValid(board, row, col)) {continue;}// Make a choiceboard[row][col] = 'Q';// Make the next selectionbacktrack(board, row + 1);// Undo the selectionboard[row][col] = '.';}}/*** Judge legality* * @param board Board* @param row The row of board* @param col The column of board* @return bool*/bool isValid(vector<string>& board, int row, int col) {int n = board.size();// Check whether the columns have conflicting queensfor (int i = 0; i < n; i++) {if (board[i][col] == 'Q') {return false;}}// Check the upper right for conflicting queensfor (int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {if (board[i][j] == 'Q') {return false;}}// Check the upper left for conflicting queensfor (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {if (board[i][j] == 'Q') {return false;}}return true;}
};

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

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

相关文章

2024几个测试接口的好工具,效率加倍~

作为一名后端程序员&#xff0c;一定要对自己写的接口负责&#xff0c;保证接口的正确和稳定性。因此&#xff0c;接口测试也是后端开发中的关键环节。 但我相信&#xff0c;很多朋友是懒得测试接口的&#xff0c;觉得这很麻烦。一般自己写的接口自己都不调用&#xff0c;而是…

探索设计模式的魅力:掌握命令模式-解锁软件设计的‘遥控器’

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 引言&#xff1a;探索命令模式的奥秘 软件设计领域充满挑战与机遇&#xff0c;命令模式…

Jlink+OpenOCD+STM32 Vscode 下载和调试环境搭建

对于 Mingw 的安装比较困难&#xff0c;国内的网无法正常在线下载组件&#xff0c; 需要手动下载 x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 版本的软件包&#xff0c;添加环境变量&#xff0c;并将 mingw32-make.exe 名字改成 make.exe。 对于 OpenOCD&#xff0c;需要…

TrueNAS-SCALE安装步骤及基本设置(存储池、数据集、用户,权限,SMB 共享等)

目录 基本配置安装前准备安装关于TrueNASNAS是什么TrueNAS是什么为什么选择TrueNAS 服务器基本设置更改语言创建存储池创建数据集设置用户和用户组设置SMB共享数据集权限设置 基本设置中的概念存储池和数据集SMB 共享 映射网路驱动器其他注意事项总结 基本配置 操作系统版本Tr…

Spring Boot java -jar --spring.profiles.active=dev 失效问题

之前动态部署修改配置文件的情况不多&#xff0c;所以也没注意过&#xff0c;这个问题今天困扰了好久&#xff0c;经过多方查询后得到了解决办法 直接上代码 <profiles><profile><!-- 本地开发环境 --><id>dev</id><properties><profi…

外汇天眼:前高盛分析师因内幕交易和欺诈罪被判刑22个月

在南华克皇冠法院进行的判决听证会后&#xff0c;35岁的穆罕默德齐纳&#xff08;Mohammed Zina&#xff09;今天因内幕交易和欺诈罪被判刑22个月。 穆罕默德齐纳于2024年2月15日在南华克皇冠法院经过为期12周的审判后&#xff0c;因六项内幕交易罪和三项欺诈罪被裁定有罪&…

《白话C++》第10章 STL和boost,Page74 10.4.4 std::unique_ptr

std::unique_ptr可以同时处理普通指针和指向数组的指针&#xff1a; unique_ptr像是auto_ptr的功能改良版 第一个改进就是可以管理指向单一对象的指针&#xff0c;也可以管理指向连续对象&#xff08;数组&#xff09;的指针。 第二个&#xff0c;unique_ptr改进的是&#xf…

【qt创建线程两种方式】

QT使用线程的两种方式 1.案例进度条 案例解析&#xff1a; 如图由组件一个进度条和三个按钮组成&#xff0c;当点击开始的时候进度条由0%到100%&#xff0c;点击暂停&#xff0c;进度条保持之前进度&#xff0c;再次点击暂停变为继续&#xff0c;点击停止按钮进度条停止。 案…

【C++学习手札】多态:掌握面向对象编程的动态绑定与继承机制(深入)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;世界上的另一个我 1:02━━━━━━️&#x1f49f;──────── 3:58 &#x1f504; ◀️ ⏸ ▶️ ☰ &am…

速卖通新店测评需要提前准备哪些资料?

在速卖通平台上&#xff0c;新店的起步往往充满挑战。缺乏活动支持、流量稀少&#xff0c;使得许多新卖家在90天内达成60单业绩的目标前望而却步。然而&#xff0c;有一种策略能够帮助卖家快速步入正轨——那就是测评。不过&#xff0c;对于测评&#xff0c;许多新手卖家存在误…

【牛客面试必刷TOP101】Day23.BM27 按之字形顺序打印二叉树和BM30 二叉搜索树与双向链表

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;牛客面试必刷TOP101 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&…

如何将阿里云服务器迁移

&#x1f4d1;前言 本文主要是如何将阿里云服务器迁移实现数据转移的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️** &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日…