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

网站建设帮助中心哈尔滨建立网站公司

网站建设帮助中心,哈尔滨建立网站公司,找阿里巴巴购买做网站的软件,制作网站后台一、题目 按照国际象棋的规则#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n #xff0c;返回所有不同的 n 皇后问题 的解决方案…一、题目 按照国际象棋的规则皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上并且使皇后彼此之间不能相互攻击。 给你一个整数 n 返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。 来源力扣LeetCode 链接https://leetcode.cn/problems/n-queens/description/ 二、C解法 我的思路及代码 采用回溯的思想。这里需要一个判断的函数 isValid 来处理当前位置是否是可选的位置。每一次选择的时候都会前进一行然后在当前行中选择可用的列。如果这个列是可用的那么就可以选择此路径然后继续后面的回溯如果不可用则继续往下找。本质是一个全排列的问题。由于我们的方式是从一行一行的往下找那么在 isValid 中就不必判定左下角和右下角的合理情况这必然是可选的。 class Solution { public:vectorvectorstring ans;bool isValid(int row,int col,vectorstring temp){int rowTemp row;int colTemp col;//判断列有没有棋子for(int i0;itemp.size();i){if(temp[i][col] Q)return false;}//判断左上有没有棋子for(;rowTemp0colTemp0;rowTemp--,colTemp--){if(temp[rowTemp][colTemp] Q)return false;}//判断右上有没有棋子for(rowTemp row,colTemp col;rowTemp0colTemptemp.size();rowTemp--,colTemp){if(temp[rowTemp][colTemp] Q)return false;}return true;}void backtrance(vectorstring temp,int row){if(rowtemp.size()){ans.push_back(temp);return;}for(int col0;coltemp.size();col){if(isValid(row,col,temp)){temp[row][col] Q;backtrance(temp,row1);temp[row][col] .;}}}vectorvectorstring solveNQueens(int n) {vectorstring temp(n,string(n,.));backtrance(temp,0);return ans;} };时间复杂度O(N!)其中 N 是皇后数量空间复杂度O(N)其中 N 是皇后数量。空间复杂度主要取决于递归调用层数、记录每行放置的皇后的列下标的数组以及三个集合递归调用层数不会超过 N数组的长度为 N每个集合的元素个数都不会超过 N 官方参考代码 方法一基于集合的回溯 采用了集合的方式来存储各个线上皇后的情况本质还是回溯算法。 class Solution { public:vectorvectorstring solveNQueens(int n) {auto solutions vectorvectorstring();auto queens vectorint(n, -1);auto columns unordered_setint();auto diagonals1 unordered_setint();auto diagonals2 unordered_setint();backtrack(solutions, queens, n, 0, columns, diagonals1, diagonals2);return solutions;}void backtrack(vectorvectorstring solutions, vectorint queens, int n, int row, unordered_setint columns, unordered_setint diagonals1, unordered_setint diagonals2) {if (row n) {vectorstring 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);}}}vectorstring generateBoard(vectorint queens, int n) {auto board vectorstring();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/14559203/

相关文章:

  • 图书馆 网站开发 总结c 做的网站怎么上传图片
  • 网站续费贵是重新做个好还是续费mvc做门户网站
  • 烟台网站建设烟台用thinksns做的网站
  • 怎么给网站动态做伪静态wordpress xrea
  • 美塔基500元做网站可信吗怎么生成网站源代码
  • 做网站工商局要不要备案呢百度收录什么网站吗
  • wordpress建立移动站建网站 是否 数据库
  • 上海做网站去哪里基于h5的移动网站开发
  • 网站制作报价图片欣赏高端大气的网络公司名称
  • 山东seo网络推广苏宁网站优化与推广
  • 直接找高校研究生做网站行吗南昌建站模板
  • 单县网站开发江苏建设主管部门网站
  • 网站上线要多久做视频添加字幕的网站
  • 建设电瓶车官方网站it网站建设方案
  • 高校网站群建设方案wordpress编辑页面打开慢
  • 建站之家官网网站开发的推荐
  • 怎么用flash做游戏下载网站网站吸流量
  • 网站建设好怎么发布网站关键词优化排名软件
  • 好的案例展示网站wordpress 美化插件
  • 怎么将公司网站设成首页济南市住房与城乡建设厅网站
  • 英文网站建设 淮安无锡知名网站
  • 延吉制作网站怎么给自己做网站
  • 内销网站要怎么做专业网站设计制作优化排名
  • mysql 注册网站wordpress前端上传头像
  • 酒泉网站建设专家自己做传奇网站
  • 网站收录没排名城乡建设管理局网站
  • 网站建设对企业带来什么作用网站建设运营维护啥意思
  • 建网站需要什么人seo网站建设接单
  • 网站开发工具安卓版南京电商网站设计公司
  • 官方网站作用网站后台维护技能