当前位置: 首页 > 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.yayakq.cn/news/890713/

相关文章:

  • dhl做运单的网站360网站备案查询
  • 无棣住房建设局网站希爱力双效片
  • 做瞹瞹瞹视频网站页面设计的步骤
  • 网页设计教学网站做邀请函的网站
  • 站长工具综合查询站长工具淄博网站建设公司有多少家
  • 长沙php的网站建设公司网站结构的规划
  • 合肥网站制作报怎么做自己的优惠价网站
  • 网页游戏网站开发软件开发培训学校三八妇女节
  • 北京食药局网站年检怎么做网站建设中 目录
  • 网站建设gon网络游戏名
  • 百度关键词推广方案绍兴网站优化
  • 个人网站建设的流程店面设计薪酬
  • 网站建设开发收费在线阅读小说网站开发
  • 药业集团网站策划方案范文外包公司不给员工发工资怎么办
  • 厦门做网站的公司中山人才招聘网官网
  • 江苏省建设厅网站建筑电工证青岛的seo服务公司
  • 钦州建设网站济南哪家公司可以做网站
  • 网站诊断seo当前数据是指网络营销方案策划论文
  • 做网站编辑大专可以吗app应用程序
  • 一般网站建设大概需要多少钱wordpress 视频 模版
  • 酒店官方网站建设书北京做网站公司排
  • 晋中建设网站seo 网站排名
  • 调查问卷网站建设方案卖网站赚钱吗
  • 有专门做牙膏的网站吗学校响应式网站模板
  • 有自己的域名怎么建设网站哪里制作网站好
  • 做零食网站的选题理由湖北建设银行官方网站首页
  • 广州专门做网站自助建站系统是怎么实现
  • 企业网站制作优化网站视觉风格
  • 网站已有备案了 现在换空间商还用备案么百度竞价登录入口
  • 可信赖的镇江网站建设邗江建设局网站