当前位置: 首页 > news >正文

做网站的算什么行业千锋教育培训多少钱

做网站的算什么行业,千锋教育培训多少钱,第五届中国国际进口博览会召开时间,wordpress行情滚动插件题目 51. N 皇后 困难 相关标签 数组 回溯 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0…

题目

51. 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

思路和解题方法

首先,定义了一个名为 Solution 的类。其中:

  • ans:成员变量,用于记录所有可行的 N 皇后方案;
  • backtracking:回溯函数,用来尝试放置 N 个皇后;
  • isvalid:函数,用于检查当前位置是否可放置皇后;
  • solveNQueens:主函数,使用回溯法求解 N 皇后问题。

在 backtracking 函数中:

  • 当已经成功放置 N 个皇后时,将当前的棋盘加入答案数组 ans 中。
  • 对于每一行,在第 col 列尝试放置皇后,如果该格子可行,则标记上皇后,继续向下一行进行搜索,搜索完后回溯到上一步位置并取消标记;
  • 搜索过程中,调用函数 isvalid 进行当前位置是否可放的判断。

在 isvalid 函数中:

  • 检查当前列是否已经有皇后;
  • 检查左上方是否已经有皇后;
  • 检查右上方是否已经有皇后;
  • 如果以上均未出现皇后,则说明该位置可放置皇后,返回真。

而在主函数 solveNQueens 中:

  • 清空答案数组 ans,并定义初始棋盘状态 chessboard;
  • 调用回溯函数 backtracking 在 chessboard 中查找所有可行的 N 皇后方案;
  • 返回答案数组 ans。

复杂度

        时间复杂度:

                O(n!)

算法的时间复杂度为 O(n!),其中 n 表示棋盘大小。因为每一行只能放置一个皇后,所以在搜索下一行的时候,需要排除已经放置的皇后所在的列和两条对角线上的位置,因此每一行可选的位置数是 n,总的搜索次数是 n×(n−2)×(n−4)×⋯1=n!。

        空间复杂度

                O(n^2)

算法的空间复杂度是 O(n2),因为需要使用一个 n×n 的二维数组 chessboard 来存储棋盘状态,同时还需要使用一个二维数组 ans 来存储所有可行的 N 皇后方案。

c++ 代码

class Solution {
public:vector<vector<string>> ans;  // 存储所有可行的 N 皇后方案void backtracking(int n, int row, vector<string> &chessboard){if (row == n)  // 若已成功放置 N 个皇后,将当前棋盘加入答案数组{ans.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;}for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--){if (chessboard[i][j] == 'Q')  // 检查左上方是否已经有皇后return false;}for (int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++){if (chessboard[i][j] == 'Q')  // 检查右上方是否已经有皇后return false;}return true;  // 当前位置可放置皇后}vector<vector<string>> solveNQueens(int n) {ans.clear();  // 清空答案数组vector<string> chessboard(n, string(n, '.'));  // 初始化棋盘backtracking(n, 0, chessboard);  // 调用回溯函数开始搜索return ans;  // 返回所有可行的 N 皇后方案}
};

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

http://www.hkea.cn/news/410698/

相关文章:

  • 这么做3d网站企业邮箱网页版
  • 瑞安网站建设公司关键词排名网络推广
  • 南京学做网站友情链接检查工具
  • 参考文献网站开发百度重庆营销中心
  • 如何做微信ppt模板下载网站企业网页设计公司
  • 做b2b网站百度点击快速排名
  • 网站怎么做移动图片不显示不出来吗芭嘞seo
  • 旅游网站建设服务器ip域名解析
  • 企业网站建设三个原则百度指数资讯指数是指什么
  • 房地产集团网站建设方案软文文案案例
  • 阜蒙县建设学校网站是什么北京seo编辑
  • 珠海建设局网站十大经典事件营销案例分析
  • 创建网站开发公司互联网推广引流是做什么的
  • 万盛集团网站建设seo网站推广全程实例
  • 做教育的网站需要资质吗网站怎么开发
  • 微网站怎么做滚动中国万网域名注册官网
  • 个人如何免费建网站seo在线优化工具 si
  • 双线主机可以做彩票网站吗网络推广合作协议
  • 做外贸的b2b网站域名批量查询系统
  • 建设网站需要哪些职位网站建设策划书
  • 苏州网站建设哪里好网站点击排名优化
  • 网站建设收费标准策划百度推广关键词越多越好吗
  • 网站怎么做更新吗如何建立网页
  • 国外建设工程招聘信息网站tool站长工具
  • 专业做相册书的网站电商网站建设制作
  • 银川网站开发公司电话东莞网
  • 环境保护局网站管理制度建设百度指数的主要功能有
  • 安装wordpress提示500错误关键词优化的策略有哪些
  • 企业网站建设公司排名深圳高端seo公司助力企业
  • 做网站套餐网站seo