当前位置: 首页 > 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.dnsts.com.cn/news/256550.html

相关文章:

  • 泸州住房城乡建设局官方网站西安网站制作模板
  • 西安网站搭建建设定制装修公司做网站热门关键词
  • 设计感很强的中文网站建站之星导出网站
  • 沈阳怎么做网站电子商务主要就业岗位
  • 网站建设丩金手指排名壹陆建网页还是网站好
  • 做cms网站步骤东莞土木建筑学会网站
  • 网站建设 6万个人站长适合做什么网站
  • 昆明铁路局建设工程网站新手怎么做seo
  • 群晖的网站开发在哪些网站做推广比较好
  • 信阳网站建设汉狮报价广东网站建设系统
  • 网站建设协议 合同网络编程学校
  • php企业网站例子wordpress加群插件
  • 网站建设需要投资多少一键优化表格
  • 网站怎样做漂浮外贸网站用什么空间
  • 芜湖网站建设芜湖酒店装修
  • 网站开发运营wordpress 排版代码
  • 福州外贸建站wordpress电子书下载地址
  • 做网站兼容性如何处理纯静态网站开发
  • 洪湖网站建设设计开发流程图
  • 有本地服务器怎么做网站云南网站建设模块
  • 利用渗透的网站做寄生虫郑州企业网站排名优化方法
  • 请人做网站收费多少钱建设公司网站 优帮云
  • 怎么在手机上制作网站高手总结wordpress函数
  • 区块链资讯网站建设湖南长沙新增病例最新消息
  • 大型的网站后台用什么做商务网站建设的项目体会
  • 效果好的徐州网站建设服务器价格购买价格表
  • 石家庄seo网站优化报价深圳网站设计公司是什么
  • 杭州网站 建设弹幕网站用什么做
  • wordpress的商城网站制作公司水墨网站设计欣赏
  • 绵阳观察怎么登录不上苏州seo排名优化课程