n皇后
链接
n皇后问题是说给定n*n的棋盘和n个皇后,求出所有合理的摆法。所谓合理的摆法是说n个皇后可以平安无事的处于棋盘上。国际象棋中皇后可以横着走、竖着走、斜着走,只要处于这些位置,皇后就会杀掉别人。

函数
solveQueens(int n) n*n的方格,给出n皇后的解决方案
DFS(vector &board,int row) 深搜+回溯找到所有的解,存在result中
isValid(vector &board,int row,int col) 判断(row,col)位置能否放置皇后

回顾深搜的代码框架

DFS(){//退出条件遍历{//不合法剪枝,n皇后是列,左上方、右上方不能出现//做出选择,n皇后是在(row,col)放置皇后//下一次决策递归//撤销选择}
}

DFS调用
调用的时候给定路径board和选择列表row,初始时即为DFS(board,0),棋盘全是空的,从第零行开始遍历。

代码

class Solution {public:vector<vector<string> > result;vector<vector<string>> solveNQueens(int n) {vector<string> board(n,string(n,'.'));//赋值n个点DFS(board,0);//路径board,选择列表:rowreturn result;}void DFS(vector<string> &board,int row){//exitif(row==board.size()){result.push_back(board);return;}int n=board[0].size();//column//for(int col=0;col<n;++col){//不合法if(!isValid(board,row,col))//棋盘(row,col)这个位置不能放置continue;//做出选择:是该位置(row,col)放置皇后Qboard[row][col]='Q';//下一次决策DFS(board,row+1);//撤销选择board[row][col]='.';}}
//判断(row,col)这个位置是否为Qbool isValid(vector<string> &board,int row,int col){int n=board.size();//size of row//如果该列不能放for(int i=0;i<n;i++){if(board[i][col]=='Q')//固定列,差点写错return false;}//如果左上方不能放for(int i=row-1,j=col-1;i>=0&&j>=0;i--,j--){if(board[i][j]=='Q')return false;}//如果右上方不能放for(int i=row-1,j=col+1;i>=0&&j<board[0].size();i--,j++){if(board[i][j]=='Q')return false;}return true;}
};

Leetcode51 n皇后 DFS+回溯(模板题)相关推荐

  1. leetcode51. N 皇后(回溯算法)

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. 每一种解 ...

  2. [Leetcode][第79题][JAVA][单词搜索][DFS][回溯]

    [问题描述][中等] [解答思路] 1. DFS繁琐版本 class Solution {public boolean exist(char[][] board, String word) {bool ...

  3. [Leetcode][第81题][JAVA][N皇后问题][回溯算法]

    [问题描述][困难] [解答思路] 1. 主副对角线列 标记 复杂度 import java.util.ArrayDeque; import java.util.ArrayList; import j ...

  4. 小雨的矩阵(DFS三参数模板题)

    E-小雨的矩阵 题目描述 小雨有一个n×n 的矩阵,起点在(1,1),终点在(n,n),只能向下或向右走,且每次只能走 1 步. 矩阵上每个点都有一个点权a(i,j). 求走到终点的路径有多少不同的点 ...

  5. 洛谷 P1219-八皇后(dfs回溯)

    题目描述 网址传送:https://www.luogu.com.cn/problem/P1219 八皇后问题描述:介是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于 ...

  6. 深度优先搜索dfs算法刷题笔记【蓝桥杯】

    其实网上已经有不少dfs的算法笔记,但我之所以还再写一篇,主要是因为我目前见到的笔记,都有些太偏向理论了. 对于基础薄弱的或是没有基础的人(like me),有点不合适,因为看了,也不能说自己会了. ...

  7. 0816-欧拉回路(外带模板题一个+sao操作)

    在讲题之前我把有关欧拉回路的知识点先整理出来,如下: 知识锦囊 欧拉路径: 在图 G 中包含每条边各一次的路径 欧拉回路:在图 G 中从起点出发包含每条边各一次且最终回到起点的路径(就是如果一个欧拉路 ...

  8. DFS+回溯算法专题

    基础知识 回溯法是一种选优搜索法(试探法),被称为通用的解题方法,这种方法适用于解一些组合数相当大的问题.通过剪枝(约束+限界)可以大幅减少解决问题的计算量(搜索量). 深度优先搜索(Depth-Fi ...

  9. DFS+回溯——第5周打卡

    链表专题: 题目简介 LeetCode题号 1-电话号码的字母组合 LeetCode第17题 2-单词搜索 LeetCode第79题 3-全排列 LeetCode第46题 4-全排列Ⅱ LeetCod ...

最新文章

  1. AlphaGo Zero的伟大与局限——ResNet作者、旷视研究院院长孙剑深度评述
  2. 如何修改word中的单位信息、用户信息及文档属性
  3. matlab crf 工具包,python调用CRF++工具包
  4. SQL Server Management Studio Express出现一半中文一半英文的问题
  5. python使用xml布局界面_Python:使用ElementTree更新XML文件,同时尽可能地保留布局...
  6. truncate与delete的区别
  7. 产品经理晋升后如何带团队?
  8. 原生html5时间组件,JFinal遇到了原生Html5时间组件格式转换问题怎么处理?
  9. 如何格式化电脑_如何将c盘格式化,垃圾文件太多,不知道怎么办
  10. 程序编译与代码优化 -- 早期(编译期)优化
  11. 如何利用大数据进行价值兑现才是正经事
  12. 80X86寄存器介绍
  13. 多租户数据架构以及hibernate支持(Multi-TenantDataArchitecture)
  14. VB.NET DataGridView与数据库的连接
  15. pp助手苹果版本_苹果开放10.33降级通道,附降级教程及可降机型
  16. 解决local class incompatible stream classdesc serialVersionUID = 7170114032608506842, local class seri
  17. unity检测范围内敌人_怎样获取离自己距离最近的敌人
  18. 计算机考试怎样切换输入法,高级会计师考场如何切换输入法?
  19. R语言计算并合并各物种的OTU数量
  20. 菏泽话务员机器人方案_智能打电话机器人让电话营销变得更简单

热门文章

  1. Cocos Creator实现的《点我+1》
  2. JavaScript工具库之Lodash
  3. MVC 学习日志1(上)
  4. .NET智能客户端(SmartClient)
  5. 关于神经网络分类特征平移不变性的实验
  6. ctr 平滑_预算平滑技术在58商业的探索与实践
  7. 【控制】传递函数的性质
  8. stm32--对固件库的认识2
  9. 雅客EXCEL (3)-合并取消单元格、平均值、添加序号
  10. 【arduino】arudino开发ESP32 SPIFFS文件上传方法