51/52 N-Queens(N皇后问题)
来源:互联网 发布:数据库角色权限设计 编辑:程序博客网 时间:2024/05/16 07:03
51 N-Queens
dfs经典问题,采用回溯法求解。
经典的N皇后问题,基本所有的算法书中都会包含的问题,经典解法为回溯递归,一层一层的向下扫描,需要用到一个pos数组,其中pos[i]表示第i行皇后的位置,初始化为-1,然后从第0开始递归,每一行都一次遍历各列,判断如果在该位置放置皇后会不会有冲突,以此类推,当到最后一行的皇后放好后,一种解法就生成了,将其存入结果res中,然后再还会继续完成搜索所有的情况,代码如下:
class Solution {public: vector<vector<string>> solveNQueens(int n) { vector<vector<string>> res; vector<int> pos(n, -1); dfs(pos, n, 0, res); return res; } void dfs(vector<int> &pos, int n, int row, vector<vector<string>> &res) { if(row == n) { vector<string> tmp(n, string(n, '.')); //存储满足要求的解,注意初始化格式 for(int i = 0; i < n; ++i) { tmp[i][pos[i]] = 'Q'; } res.push_back(tmp); } else { for(int i = 0; i < n; ++i) { if(check(pos, row, i)) { //检查是否满足条件 pos[row] = i; dfs(pos, n, row + 1, res); //回溯 pos[row] = -1; //还原标志位 } } } } bool check(vector<int> &pos, int row, int col) { for(int i = 0; i < row; ++i) { if(pos[i] == col || abs(row - i) == abs(col - pos[i])) //确保不在同一行列以及不在同一斜对角线上 return false; } return true; }};
52 N-Queens II
思路与前一题一样,只需要将满足条件的内容改为 res++,都是要用回溯法Backtracking来解。
class Solution {public: int totalNQueens(int n) { vector<int> pos(n, -1); int res = 0; dfs(pos, n, 0, res); return res; } void dfs(vector<int> &pos, int n, int row, int& res) { if(row == n) { res++; //res为计数器 } else { for(int i = 0; i < n; ++i) { if(check(pos, row, i)) { pos[row] = i; dfs(pos, n, row + 1, res); pos[row] = -1; } } } } bool check(vector<int> &pos, int row, int col) { for(int i = 0; i < row; ++i) { if(pos[i] == col || abs(row - i) == abs(col - pos[i])) return false; } return true; }};
N皇后,经典问题,记住模板很关键。
阅读全文
0 0
- 51/52 N-Queens(N皇后问题)
- leetcode-51 N-Queens N皇后问题
- [LeetCode 51&52] N-Queens I & II (N皇后问题)
- N-Queens八皇后问题
- [LeetCode] [N皇后问题] N-Queens & N-Queens II
- N-皇后 N-Queens
- leetcode51/52-N-Queens I/II(n皇后问题)
- N-Queens N皇后问题@LeetCode
- 51.N-Queens&n皇后问题
- N-Queens N皇后问题 DFS
- N 皇后问题 : Leetcode 51. N-Queens
- leetcode 52. N-Queens II & leetcode 51 N-Queens (N皇后问题)
- Leetcode #51&52 N-Queens I&II N皇后问题 1&2 解题报告
- LeetCode-51-N-Queens 八皇后问题dfs
- N-Queens 八皇后问题I
- 【N皇后&DFS】N-Queens
- leetcode:N-Queens (n皇后问题) 【面试算法题】
- N-Queens II N皇后问题(有几种放法)@LeetCode
- MarkDown入门基本操作学习小结
- JDBC连接Azure SQL Server DB
- 【栈队列】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 微信小程序-pinkDiary
- DBI、DPI、DSI LCD 接口简介
- 51/52 N-Queens(N皇后问题)
- SQL新手新手向修炼(2)
- 自定义时间轴控件
- tomcat,Jboss,weblogic区别与比较
- 栈和队列:滑动窗口和数组变树问题
- EL表达式函数总结
- you must install the sshpass program 解决方式
- nhmicro添加合同模板管理功能
- OpenCV自学笔记18. 基于SVM和神经网络的车牌识别(二)