leetcode51,52 N皇后相关(回溯方法)
创始人
2024-05-22 11:46:54
0

题目1:N皇后
按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。
在这里插入图片描述
输入:n = 4
输出:[[“.Q…”,“…Q”,“Q…”,“…Q.”],[“…Q.”,“Q…”,“…Q”,“.Q…”]]
解释:如上图所示,4 皇后问题存在两个不同的解法。
分析思路:
首先明确此问题限制条件:每一横行,竖行,斜行不能出现超过一个皇后
可以考虑运用unordered_set来记录unordered_set的优点(去重容器)
1.直接存取数据的值,对比unordered_map
2.容器内部各元素不相等
3.不会将元素按照key值排序,对比ordered_set

需要一个queen变量来存放每一行皇后放的具体列,之后打印面板board(用"Q",“.”)来打印二维数组,至于怎么得到正确的皇后的位置,应该采用逐个遍历,但是普通循环解决不了这个问题,本质上是在逐个尝试,当发现不合适时及时退出,所以采用回溯方法

class Solution {
public:vector> solveNQueens(int n) {unordered_setcolumns;//容易内部各元素不能相同unordered_setdial1;unordered_setdial2;auto solution=vector>();auto queens=vector(n,-1);backtrack(solution,queens,n,0,columns,dial1,dial2);return solution;}void backtrack(vector>& solution,vector&queens,int n,int row,unordered_set&columns,unordered_set&dial1,unordered_set&dial2){if(row==n){vector board= generateboard(queens,n);solution.push_back(board);}else{for(int i=0;iif(columns.find(i)!=columns.end()){continue;}int dial_1= row-i;//同一条斜线上的每个位置满足行下标与列下标之差相等(0,0) 和(3,3) ,i代表列if(dial1.find(dial_1)!=dial1.end())//要保证dial1中没有出现过当前值{continue;}int dial_2=row+i;if(dial2.find(dial_2)!=dial2.end()){continue;}queens[row]=i;//在所有不满足条件进行之后  才开始插入columns.insert(i);dial1.insert(dial_1);dial2.insert(dial_2);backtrack(solution, queens, n, row + 1, columns, dial1, dial2);//回溯queens[row]=-1; //回溯之后要重置columns.erase(i);//之前插入的不符合条件的需要删除dial1.erase(dial_1);dial2.erase(dial_2);}}}vector generateboard(vector &queens, int n) {auto board = vector();for (int i = 0; i < n; i++) {string row = string(n, '.');//初始化全部置为....row[queens[i]] = 'Q';//queens[i] //代表第i行的皇后应该放的列的位置board.push_back(row);}return board;}
};

题目二:N皇后二
n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。
输入:n = 4
输出:2
解释:如上图所示,4 皇后问题存在两个不同的解法。

class Solution {
public:int totalNQueens(int n) {unordered_setcolunms;unordered_setdia1s;unordered_setdia2s;vectorqueens(n,-1);//int solve_cnt=0;//backtrack(colunms,dia1s,dia2s,0,queens,solve_cnt,n);return backtrack(colunms,dia1s,dia2s,0,queens,n);}int backtrack(unordered_set&colunms,unordered_set&dia1s,unordered_set&dia2s,int row,vector&queens,int n){if(row==n){return 1;}else{int count=0;for(int i=0;iif(colunms.find(i)!=colunms.end()){continue;}//colunms.insert(i);//i代表列int dia1=row+i;if(dia1s.find(dia1)!=dia1s.end()){continue;}//dia1s.insert(dia1);int dia2=row-i;if(dia2s.find(dia2)!=dia2s.end()){continue;}colunms.insert(i);//i代表列 //在所有不满足条件进行之后  才开始插入dia1s.insert(dia1);dia2s.insert(dia2);queens[row]=i;count+=backtrack(colunms,dia1s,dia2s,row+1,queens,n);colunms.erase(i);dia1s.erase(dia1);dia2s.erase(dia2);queens[row]=-1;                          }return count;}}
};

相关内容

热门资讯

秋季开学典礼颁奖主持词 秋季开学典礼颁奖主持词  活动对象的不同,主持词的写作风格也会大不一样。在人们积极参与各种活动的今天...
老人寿宴致辞 老人寿宴致辞(精选7篇)  在我们平凡的日常里,许多人都写过致辞吧,致辞具有“礼仪性”或“仪式化”的...
经典高考升学宴主持词   尊敬的各位领导、各位嘉宾、各位亲朋好友:  大家好!8月,理想赤诚、热爱挚烈,8月,阳光灿烂、收...
中秋晚会主持稿 中秋晚会主持稿(精选5篇)  又到了一个激动人心的好日子!中秋合家团圆,是中华民族的传统习俗。下面是...
男孩满月酒主持词 男孩满月酒主持词  主持词要注意活动对象,针对活动对象写相应的主持词。在各种集会、活动不断增多的社会...
婚礼司仪主持词简短版 婚礼司仪主持词简短版  借鉴诗词和散文诗是主持词的一种写作手法。在人们积极参与各种活动的今天,各种集...
培训主持词 【精华】培训主持词八篇  借鉴诗词和散文诗是主持词的一种写作手法。在当今不断发展的世界,很多晚会、集...
婚礼主持词完整版 2017婚礼主持词(完整版)  无论新人举行什么样形式的婚礼,婚礼主持人是必不能少的。那么婚礼司仪全...
《哈利波特》的经典语录台词 《哈利波特》的经典语录台词  “就看你的了,哈利,要使他们看到,作为一名找球手,单靠一个有钱的爸爸是...
前任2备胎反击战经典台词 前任2备胎反击战经典台词  1、一见钟情太肤浅,日久生情才是真。  2、再深的感情也敌不过缘分的交错...
生日宴会主持词开场白 生日宴会主持词开场白(精选19篇)  【导语】一个好的活动开展,主持人的开场一定要和活动的主题相契合...
大学军训汇报表演主持词 大学军训汇报表演主持词  军训汇演是必不可少的,下面unjs小编整理了大学军训汇报表演主持词,欢迎阅...
闭幕词 闭幕词(通用10篇)  闭幕词,是会议的主要领导人代表会议举办单位,在会议闭幕时的讲话。其内容一般是...
班歌串词 班歌串词尊敬的领导、亲爱的同学们:大家上午好!(合)请全体起来,齐唱《美佛儿校歌》请坐!今天我们隆重...
幼儿园元旦活动主持词开场白   一、主持人开场白:  (亲爱的爸爸妈妈,小朋友们,大家新年好!因为您的孩子,我们走到了一起,形成...
生日主持主持词 精选生日主持主持词4篇  主持词要尽量增加文化内涵、寓教于乐,不断提高观众的文化知识和素养。在如今这...
开业庆典主持词 开业庆典主持词  什么是主持词?  主持词是主持人对各种晚会背诵已经准备好的稿子,或眼看提示器说出,...
新职工欢迎会主持词 新职工欢迎会主持词  主持词已成为各种演出活动和集会中不可或缺的一部分。在当下的中国社会,主持人的需...
颁奖晚会主持词 颁奖晚会主持词集合7篇  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化内涵。随着社会...
最新员工激励大会主持词 最新员工激励大会主持词  根据活动对象的不同,需要设置不同的主持词。在现今人们越来越重视活动氛围的社...