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

企业网站建设网页最好用的搜索引擎排名

企业网站建设网页,最好用的搜索引擎排名,网站换域名只做首页301,企业网站建设框架图一、题目 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案…

一、题目

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。
在这里插入图片描述
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/n-queens/description/

二、C++解法

我的思路及代码

采用回溯的思想。这里需要一个判断的函数 isValid ,来处理当前位置是否是可选的位置。每一次选择的时候都会前进一行,然后在当前行中,选择可用的列。如果这个列是可用的那么就可以选择此路径,然后继续后面的回溯,如果不可用则继续往下找。本质是一个全排列的问题。由于我们的方式是从一行一行的往下找,那么在 isValid 中,就不必判定左下角和右下角的合理情况,这必然是可选的。

class Solution {
public:vector<vector<string>> ans;bool isValid(int &row,int &col,vector<string> &temp){int rowTemp = row;int colTemp = col;//判断列有没有棋子for(int i=0;i<temp.size();i++){if(temp[i][col] == 'Q')return false;}//判断左上有没有棋子for(;rowTemp>=0&&colTemp>=0;rowTemp--,colTemp--){if(temp[rowTemp][colTemp] == 'Q')return false;}//判断右上有没有棋子for(rowTemp = row,colTemp = col;rowTemp>=0&&colTemp<temp.size();rowTemp--,colTemp++){if(temp[rowTemp][colTemp] == 'Q')return false;}return true;}void backtrance(vector<string> &temp,int row){if(row==temp.size()){ans.push_back(temp);return;}for(int col=0;col<temp.size();col++){if(isValid(row,col,temp)){temp[row][col] = 'Q';backtrance(temp,row+1);temp[row][col] = '.';}}}vector<vector<string>> solveNQueens(int n) {vector<string> temp(n,string(n,'.'));backtrance(temp,0);return ans;}
};
  • 时间复杂度:O(N!),其中 N 是皇后数量
  • 空间复杂度:O(N),其中 N 是皇后数量。空间复杂度主要取决于递归调用层数、记录每行放置的皇后的列下标的数组以及三个集合,递归调用层数不会超过 N,数组的长度为 N,每个集合的元素个数都不会超过 N

官方参考代码

方法一:基于集合的回溯

采用了集合的方式来存储各个线上皇后的情况,本质还是回溯算法。

class Solution {
public:vector<vector<string>> solveNQueens(int n) {auto solutions = vector<vector<string>>();auto queens = vector<int>(n, -1);auto columns = unordered_set<int>();auto diagonals1 = unordered_set<int>();auto diagonals2 = unordered_set<int>();backtrack(solutions, queens, n, 0, columns, diagonals1, diagonals2);return solutions;}void backtrack(vector<vector<string>> &solutions, vector<int> &queens, int n, int row, unordered_set<int> &columns, unordered_set<int> &diagonals1, unordered_set<int> &diagonals2) {if (row == n) {vector<string> board = generateBoard(queens, n);solutions.push_back(board);} else {for (int i = 0; i < n; i++) {if (columns.find(i) != columns.end()) {continue;}int diagonal1 = row - i;if (diagonals1.find(diagonal1) != diagonals1.end()) {continue;}int diagonal2 = row + i;if (diagonals2.find(diagonal2) != diagonals2.end()) {continue;}queens[row] = i;columns.insert(i);diagonals1.insert(diagonal1);diagonals2.insert(diagonal2);backtrack(solutions, queens, n, row + 1, columns, diagonals1, diagonals2);queens[row] = -1;columns.erase(i);diagonals1.erase(diagonal1);diagonals2.erase(diagonal2);}}}vector<string> generateBoard(vector<int> &queens, int n) {auto board = vector<string>();for (int i = 0; i < n; i++) {string row = string(n, '.');row[queens[i]] = 'Q';board.push_back(row);}return board;}
};
  • 时间复杂度:O(N!),其中 N 是皇后数量
  • 空间复杂度:O(N),其中 N 是皇后数量。空间复杂度主要取决于递归调用层数、记录每行放置的皇后的列下标的数组以及三个集合,递归调用层数不会超过 N,数组的长度为 N,每个集合的元素个数都不会超过 N
http://www.hkea.cn/news/826760/

相关文章:

  • 装修公司的网站怎么做第三方营销平台有哪些
  • 百度公司做网站吗手机网页链接制作
  • 武汉移动网站制作今天新闻最新消息
  • 酒泉建设厅网站百度seo刷排名软件
  • 天津个人网站建设yandex引擎
  • 网站改版建设 有哪些内容网络营销策划方案怎么做
  • 网站建设拾金手指下拉seo的实现方式
  • 北京宣传片湖南seo优化哪家好
  • 下载app 的网站 如何做黑帽seo排名技术
  • 个人是否做众筹网站哪里可以免费推广广告
  • 外贸网站该怎么做青岛百度推广优化怎么做的
  • 网站建设中 网页代码优化关键词排名公司
  • 网站标题优化怎么做泉州百度首页优化
  • 学习网站建设的是什么专业优化网站排名公司
  • 固定ip做网站西安网站建设推广
  • 做响应式网站好不好软文发布门户网站
  • 重庆做网站建设的公司哪家好最基本的网站设计
  • 长春网站制作wang网站营销软文
  • discuz 网站搬家市场营销的策划方案
  • 做婚礼网站的公司简介seo网站关键词优化软件
  • 哪些客户需要做网站推广平台排名前十名
  • 团购的网站扣佣金分录怎么做厦门百度竞价
  • 国家疫情最新政策麒麟seo外推软件
  • 河南第二波疫情最新消息淘宝关键词优化技巧教程
  • 优化好的网站做企业网站百度代理公司
  • 外贸b2c网站如何做推广百度电话人工服务
  • 百度怎样做网站并宣传网站2023上海又出现疫情了
  • wordpress后台登录慢阳山网站seo
  • 深圳网站建设企网络推广运营途径
  • 给自己女朋友做的网站yandex搜索引擎